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 114 115 116 117 118 119 120 121 122 123 124 125 126 127
// Chemfiles, a modern library for chemistry file reading and writing // Copyright (C) 2015-2017 Guillaume Fraux // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at http://mozilla.org/MPL/2.0/ //! Chemfiles is a multi-language library written in modern C++ for reading and //! writing from and to molecular trajectory files. These files are created by //! your favorite theoretical chemistry program, and contains informations about //! atomic or residues names and positions. Some format also have additional //! informations, such as velocities, forces, energy, … //! //! This crate expose the C API of chemfiles to Rust, and make all the //! functionalities accessibles. For more informations on the C++ library, //! please see its [documentation][cxx_doc]. Specifically, the following pages //! are worth reading: //! //! - The [overview][overview] of the classes organisation; //! - The lisf of [supported formats][formats]; //! - The documentation for the [selection language][selections]; //! //! As all the function call the underlying C library, they all can fail and //! thus all return a `Result<_, Error>` value. //! //! [cxx_doc]: https://chemfiles.org/chemfiles //! [overview]: https://chemfiles.org/chemfiles/latest/overview.html //! [formats]: https://chemfiles.org/chemfiles/latest/formats.html //! [selections]: https://chemfiles.org/chemfiles/latest/selections.html #![deny(missing_docs)] #![warn(trivial_casts, unused_import_braces, variant_size_differences)] #![warn(unused_qualifications, unused_results)] // Configuration fro clippy lints #![allow(unknown_lints)] #![warn(clippy, clippy_pedantic)] #![allow(needless_return, shadow_reuse, stutter, missing_docs_in_private_items)] #![allow(zero_ptr, cast_possible_truncation, or_fun_call, use_self, needless_pass_by_value)] #[cfg(test)] #[macro_use] extern crate approx; extern crate chemfiles_sys; use chemfiles_sys::{chfl_add_configuration, chfl_version}; mod strings; mod errors; pub use errors::{Error, Status}; pub use errors::set_warning_callback; /// Custom result type for working with errors in chemfiles pub type Result<T> = std::result::Result<T, Error>; mod atom; pub use atom::Atom; mod cell; pub use cell::UnitCell; pub use cell::CellShape; mod residue; pub use residue::Residue; mod topology; pub use topology::Topology; mod frame; pub use frame::Frame; mod trajectory; pub use trajectory::Trajectory; mod selection; pub use selection::{Match, Selection}; mod property; pub use property::Property; /// Get the version of the chemfiles library. /// /// # Example /// ``` /// # use chemfiles; /// let version = chemfiles::version(); /// assert!(version.starts_with("0.8")); /// ``` pub fn version() -> String { unsafe { strings::from_c(chfl_version()) } } /// Read configuration data from the file at `path`. /// /// By default, chemfiles reads configuration from any file name `.chemfilesrc` /// in the current directory or any parent directory. This function can be used /// to add data from another configuration file. /// /// This function will fail if there is no file at `path`, or if the file is /// incorectly formatted. Data from the new configuration file will overwrite /// any existing data. /// /// # Example /// ```no_run /// # use chemfiles; /// chemfiles::add_configuration("local-config.toml"); /// // from now on, the data from "local-config.toml" will be used /// ``` pub fn add_configuration<S>(path: S) -> Result<()> where S: AsRef<str>, { let buffer = strings::to_c(path.as_ref()); unsafe { try!(errors::check(chfl_add_configuration(buffer.as_ptr()))); } Ok(()) } #[cfg(test)] mod tests { #[test] fn version() { assert!(::version().len() > 0); assert!(::version().starts_with("0.8")); } }