[][src]Crate fastobo

Faultless AST for Open Biomedical Ontologies.

TravisCI Codecov License Source Crate Documentation Changelog GitHub issues


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 traits 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.


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

fastobo = "0.1.0"

The OboDoc struct acts as the root of the AST. Use OboDoc::from_stream to load an OBO document from a BufRead implementor (use std::io::BufReader if needed to adapt from a raw stream):

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::ast::OboDoc::from_stream(&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-py: Idiomatic Python bindings to this crate.


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 is currently being 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.



Owned syntax tree for the OBO format version 1.4.


Error and Result types for this crate.


A selection of useful traits that exceed the scope of OBO syntax.


Parser and parsing-related traits for the OBO format.


Enhanced Borrow, ToOwned and Cow to use in tree structures.


Visitor traits for the OBO ast.