#obo #ontology #proc-macro #derive

macro fastobo-derive-internal

Internal derive macros for the fastobo crate

18 releases (4 breaking)

✓ Uses Rust 2018 edition

0.8.3 Feb 12, 2020
0.8.1 Jan 24, 2020
0.7.4 Oct 5, 2019
0.6.1 Jul 24, 2019

#5 in #ontology

Download history 420/week @ 2019-12-12 2/week @ 2019-12-19 36/week @ 2019-12-26 70/week @ 2020-01-02 150/week @ 2020-01-09 286/week @ 2020-01-16 156/week @ 2020-01-23 34/week @ 2020-01-30 147/week @ 2020-02-06 75/week @ 2020-02-13 97/week @ 2020-02-20 115/week @ 2020-02-27 61/week @ 2020-03-05 44/week @ 2020-03-12 92/week @ 2020-03-19 29/week @ 2020-03-26

529 downloads per month
Used in 3 crates (via fastobo)

MIT license

192 lines

fastobo Star me

Faultless AST for Open Biomedical Ontologies.

TravisCI Codecov License Source Crate Documentation Changelog GitHub issues DOI


This library provides a mostly-complete implementation of the OBO flat file format 1.4.

  • Data structures - fastobo provides a complete owned AST for the OBO language, with constructors and covenience traits where applicable. There is a plan to provide borrowed data structures as well, to be able to build a view of an OBO document from borrowed data.
  • Parsing - The parser is implemented using pest, and is reexported from the fastobo-syntax crate. Most structures implement the FromPair trait which allows to build a data structure from a stream of pest tokens.
  • Errors - All functions in that crate that return a Result will always use the Error struct defined in the error module. Errors reported by pest are very meaningful, and can give the exact location of a syntax error encountered by the parser.
  • Semantics - This library exports specific methods that can be used to edit an OBO syntax tree with the semantics expected in the format guide: mapping identifiers to URLs, adding default namespaces, or expanding entity frames using treat-xrefs macros.

Warning: this project adheres to Semantic Versioning, but the API is likely to change a lot before the release of a stable 1.0.


All the following features are enabled by default, but can be disabled and cherry-picked using the default-features = false option in the Cargo.toml manifest of your project:

  • memchr - Use the memchr library to improve parser speed when searching for a particular character in a buffer.
  • threading - Use a multi-threaded parser (additionally depending on crossbeam-channel), which can greatly improve the parser speed if parsing is CPU-bound.


Add fastobo to the [dependencies] sections of your Cargo.toml manifest:

fastobo = "0.8.0"

The top-level fastobo module provides several functions to parse an OboDoc. Use fastobo::from_reader to load an OBO document from a BufRead implementor (use std::io::BufReader if needed):

extern crate fastobo;
extern crate ureq;

fn main() {
    let response = ureq::get("http://purl.obolibrary.org/obo/ms.obo").call();
    let mut reader = std::io::BufReader::new(response.into_reader());

    match fastobo::from_reader(&mut reader) {
        Ok(doc) => println!("Number of MS entities: {}", doc.entities().len()),
        Err(e) => panic!("Could not parse the Mass-Spec Ontology: {}", e),

See also

  • fastobo-syntax: Standalone pest parser for the OBO format version 1.4.
  • fastobo-graphs: Data model and serde implementation of the OBO graphs specification, with conversion traits from and to OBO.
  • fastobo-py: Idiomatic Python bindings to this crate.
  • fastobo-validator: Standalone CLI to validate OBO files against the specification.


Found a bug ? Have an enhancement request ? Head over to the GitHub issue tracker of the project if you need to report or ask something. If you are filling in on a bug, please include as much information as you can about the issue, and try to recreate the same bug in a simple, easily reproducible situation.


This project was developed by Martin Larralde as part of a Master's Degree internship in the BBOP team of the Lawrence Berkeley National Laboratory, under the supervision of Chris Mungall. Cite this project as:

Larralde M. Developing Python and Rust libraries to improve the ontology ecosystem [version 1; not peer reviewed]. F1000Research 2019, 8(ISCB Comm J):1500 (poster) (https://doi.org/10.7490/f1000research.1117405.1)


~29K SLoC