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
#![deny(missing_docs)] #![deny(warnings)] // https://github.com/Marwes/combine/issues/172 #![recursion_limit = "256"] //! # `toml_edit` //! //! This crate allows you to parse and modify toml //! documents, while preserving comments, spaces* and //! relative order* or items. //! //! It is primarily tailored to the needs of [cargo-edit](https://github.com/killercup/cargo-edit/). //! //! # Example //! //! ```rust //! use toml_edit::{Document, value}; //! //! let toml = r#" //! "hello" = 'toml!' # comment //! ['a'.b] //! "#; //! let mut doc = toml.parse::<Document>().expect("invalid doc"); //! assert_eq!(doc.to_string(), toml); //! // let's add a new key/value pair inside a.b: c = {d = "hello"} //! doc["a"]["b"]["c"]["d"] = value("hello"); //! // autoformat inline table a.b.c: { d = "hello" } //! doc["a"]["b"]["c"].as_inline_table_mut().map(|t| t.fmt()); //! let expected = r#" //! "hello" = 'toml!' # comment //! ['a'.b] //! c = { d = "hello" } //! "#; //! assert_eq!(doc.to_string(), expected); //! ``` //! //! ## Limitations //! //! Things it does not preserve: //! //! * Different quotes and spaces around the same table key, e.g. //! //! ```text //! [ 'a'. b] //! [ "a" .c] //! [a.d] //! ``` //! //! will be represented as (spaces are removed, the first encountered quote type is used) //! //! ```text //! ['a'.b] //! ['a'.c] //! ['a'.d] //! ``` //! //! * Children tables before parent table (tables are reordered by default, see [test]). //! * Scattered array of tables (tables are reordered by default, see [test]). //! //! The reason behind the first limitation is that `Table` does not store its header, //! allowing us to safely swap two tables //! (we store a mapping in each table: child key -> child table). //! //! This last two limitations allow us to represent a toml document as a tree-like data structure, //! which enables easier implementation of editing operations //! and an easy to use and type-safe API. If you care about the above two cases, //! you can use `Document::to_string_in_original_order()` to reconstruct tables in their original order. //! //! [test]: https://github.com/ordian/toml_edit/blob/f09bd5d075fdb7d2ef8d9bb3270a34506c276753/tests/test_valid.rs#L84 mod array_of_tables; mod decor; mod display; mod document; pub(crate) mod formatted; mod index; mod key; mod parser; mod table; mod value; pub use crate::array_of_tables::ArrayOfTables; pub use crate::decor::Decor; pub use crate::document::Document; pub use crate::key::Key; pub use crate::parser::TomlError; pub use crate::table::{array, table, value, Item, Iter, Table, TableLike}; pub use crate::value::{Array, ArrayIter, InlineTable, Value}; pub use formatted::decorated;