14 releases

0.4.8 Dec 5, 2022
0.4.7 May 4, 2022
0.4.5 Apr 21, 2022
0.4.4 Jan 20, 2022
0.1.2 Aug 27, 2019

#902 in Parser implementations

33 downloads per month

MIT license

1.5K SLoC

fastobo-graphs Star me

OBO Graphs decoder and encoder in Rust.

Actions Codecov License Source Crate Documentation Changelog GitHub issues DOI


This library provides an implementation of the OBO Graphs schema specified by the Gene Ontology to provide developers with a data format easier to use than plain ontology files in OBO or OWL format.

  • Data structures - the complete OBO Graphs schema is reproduced into Rust data structures with public fields for direct access to the graphs nodes. See fastobo_graphs::model to see the comprehensive list of data structures.
  • I/O - structures use serde to implement serialization and deserialization from both YAML and JSON.
  • Errors - fallible operations can return an Error with informative messages as well as an std::error::Error implementation.
  • Conversion traits - OBO Graphs can be (partially) converted to and from plain OBO documents, using the FromGraph and IntoGraph traits.


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

fastobo-graphs = "0.4"

Then use one of the top-level functions in fastobo_graphs to load a JSON or YAML serialized OBO Graph:

extern crate fastobo_graphs;
extern crate ureq;

fn main() {
    let response = ureq::get("http://purl.obolibrary.org/obo/zeco.json").call();

    match fastobo_graphs::from_reader(response.unwrap().into_reader()) {
        Ok(doc) => println!("Number of ZECO nodes: {}", doc.graphs[0].nodes.len()),
        Err(e) => panic!("Could not parse ZECO OBO Graph: {}", e),


The following feature is enabled by default, but can be disabled if needed:


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)


~77K SLoC