1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
//! *Faultless AST for Open Biomedical Ontologies.*
//!
//! [![TravisCI](https://img.shields.io/travis/fastobo/fastobo/master.svg?maxAge=600&style=flat-square)](https://travis-ci.org/fastobo/fastobo/branches)
//! [![Codecov](https://img.shields.io/codecov/c/gh/fastobo/fastobo/master.svg?style=flat-square&maxAge=600)](https://codecov.io/gh/fastobo/fastobo)
//! [![License](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square&maxAge=2678400)](https://choosealicense.com/licenses/mit/)
//! [![Source](https://img.shields.io/badge/source-GitHub-303030.svg?maxAge=2678400&style=flat-square)](https://github.com/fastobo/fastobo)
//! [![Crate](https://img.shields.io/crates/v/fastobo.svg?maxAge=600&style=flat-square)](https://crates.io/crates/obofoundry)
//! [![Documentation](https://img.shields.io/badge/docs.rs-latest-4d76ae.svg?maxAge=2678400&style=flat-square)](https://docs.rs/fastobo)
//! [![Changelog](https://img.shields.io/badge/keep%20a-changelog-8A0707.svg?maxAge=2678400&style=flat-square)](https://github.com/fastobo/fastobo/blob/master/README.md)
//! [![GitHub issues](https://img.shields.io/github/issues/fastobo/fastobo.svg?style=flat-square)](https://github.com/fastobo/fastobo/issues)
//!
//! ## Overview
//!
//! This library provides a mostly-complete implementation of the
//! [OBO flat file format 1.4](http://owlcollab.github.io/oboformat/doc/obo-syntax.html).
//!
//! * **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](http://pest.rs/),
//!   and is reexported from the [`fastobo-syntax`](https://crates.io/crates/fastobo-syntax)
//!   crate. Most structures implement the [`FromPair`](./parser/trait.FromPair.html)
//!   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](http://semver.org/spec/v2.0.0.html),
//!  but the API is likely to change a lot before the release of a stable 1.0.*
//!
//!
//! ## Usage
//!
//! Add `fastobo` to the `[dependencies]` sections of your `Cargo.toml` manifest:
//! ```toml
//! [dependencies]
//! fastobo = "0.1.0"
//! ```
//!
//! The [`OboDoc`](./ast/struct.OboDoc.html) struct acts as the root of the AST.
//! Use [`OboDoc::from_stream`](ast/struct.OboDoc.html#method.from_stream) to load
//! an OBO document from a [`BufRead`](https://doc.rust-lang.org/std/io/trait.BufRead.html)
//! implementor (use [`std::io::BufReader`](https://doc.rust-lang.org/std/io/struct.BufReader.html)
//! if needed to adapt from a raw stream):
//!
//! ```rust
//! 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`](https://pypi.org/project/fastobo/): Idiomatic Python bindings to this crate.
//!
//!
//! ## Feedback
//!
//! Found a bug ? Have an enhancement request ? Head over to the
//! [GitHub issue tracker](https://github.com/fastobo/fastobo/issues) 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.
//!
//!
//! ## About
//!
//! This project is currently being developed by [Martin Larralde](https://github.com/althonos)
//! as part of a Master's Degree internship in the [BBOP team](http://berkeleybop.org/) of the
//! [Lawrence Berkeley National Laboratory](https://www.lbl.gov/), under the supervision of
//! [Chris Mungall](http://biosciences.lbl.gov/profiles/chris-mungall/).


#![allow(dead_code, unused_imports)]

#[macro_use]
extern crate failure;
#[macro_use]
extern crate opaque_typedef_macros;

extern crate fastobo_syntax;
#[cfg(feature = "memchr")]
extern crate memchr;
extern crate opaque_typedef;
extern crate pest;
extern crate url;
#[cfg(test)]
extern crate textwrap;

#[macro_use]
pub mod parser;

pub mod ast;
pub mod error;
pub mod share;
pub mod visit;
pub mod ext;