#![cfg_attr(not(feature = "std"), no_std)]
#[macro_use]
pub mod parser;
pub mod test_helpers;
#[cfg(feature = "alloc")]
extern crate alloc;
#[cfg(feature = "alloc")]
use alloc::vec::Vec;
mod constants;
#[cfg(feature = "alloc")]
pub mod devtools;
#[cfg(any(feature = "embedded", doc))]
pub mod embedded;
pub mod error;
#[cfg(feature = "file-io")]
mod file;
#[cfg(test)]
mod internal_tests;
mod io;
mod nodes;
#[cfg(feature = "stringify")]
pub mod stringify;
#[cfg(feature = "alloc")]
pub mod testing;
mod utils;
#[cfg(feature = "validation")]
pub mod validation;
pub use error::ErrorKind;
pub use error::YamlError;
#[cfg(feature = "alloc")]
pub use error::enhanced::{EnhancedError, ErrorCode, ErrorSuggestion, Span, SuggestionBuilder};
#[cfg(feature = "alloc")]
pub use error::recovery::{
ErrorCollection, ParserState, RecoveryContext, RecoveryHandler, RecoveryStrategy,
};
#[cfg(feature = "file-io")]
pub use file::file::Format;
#[cfg(feature = "file-io")]
pub use file::file::detect_format;
#[cfg(feature = "file-io")]
pub use file::file::read_file_to_string;
#[cfg(feature = "file-io")]
pub use file::file::write_file_from_string;
pub use io::destinations::buffer::Buffer as BufferDestination;
#[cfg(feature = "file-io")]
pub use io::destinations::file::File as FileDestination;
pub use io::sources::buffer::Buffer as BufferSource;
#[cfg(feature = "file-io")]
pub use io::sources::file::File as FileSource;
pub use nodes::node_utils::get_document_base as get_document;
pub use nodes::node_utils::get_number_of_documents;
pub use nodes::node_utils::get_version as version;
#[cfg(feature = "alloc")]
pub use nodes::node::ArrayBuilder;
pub use nodes::node::BlockStyle;
#[cfg(feature = "alloc")]
pub use nodes::node::MappingBuilder;
pub use nodes::node::Node;
pub use nodes::node::Numeric;
pub use nodes::node::QuoteType;
#[cfg(feature = "alloc")]
pub use nodes::node::SetBuilder;
pub use nodes::util::make_node;
pub use nodes::util::make_set;
pub use parser::config::ParserConfig;
pub use parser::config::ParserConfigBuilder;
pub use parser::document::parse;
fn parse_from_source(
source: &mut dyn crate::io::traits::ISource,
_config: &ParserConfig,
) -> crate::error::Result<Node> {
parser::document::parse(source)
}
pub fn parse_string(yaml: &str) -> crate::error::Result<Node> {
let mut source = BufferSource::new(yaml.as_bytes());
let config = ParserConfig::default();
parse_from_source(&mut source, &config)
}
#[cfg(feature = "file-io")]
pub fn parse_file(path: &str) -> crate::error::Result<Node> {
match read_file_to_string(path) {
Ok(contents) => parse_string(&contents),
Err(e) => Err(e.to_string().into()),
}
}
pub fn parse_with_config(yaml: &str, config: ParserConfig) -> crate::error::Result<Node> {
let mut source = BufferSource::new(yaml.as_bytes());
parse_from_source(&mut source, &config)
}
#[cfg(feature = "alloc")]
pub fn parse_string_with_recovery(
yaml: &str,
_handler: RecoveryHandler,
) -> crate::error::Result<(Node, Vec<YamlError>)> {
let node = parse_string(yaml)?;
Ok((node, Vec::new()))
}
#[cfg(feature = "format-converters")]
pub use stringify::bencode::stringify as to_bencode;
#[cfg(feature = "stringify")]
pub use stringify::default::stringify;
#[cfg(feature = "format-converters")]
pub use stringify::json::stringify as to_json;
#[cfg(feature = "format-converters")]
pub use stringify::json::stringify_pretty as to_json_pretty;
#[cfg(feature = "format-converters")]
pub use stringify::toml::stringify as to_toml;
#[cfg(feature = "format-converters")]
pub use stringify::toml::stringify_pretty as to_toml_pretty;
#[cfg(feature = "format-converters")]
pub use stringify::xml::stringify as to_xml;
#[cfg(feature = "format-converters")]
pub use stringify::xml::stringify_pretty as to_xml_pretty;
#[cfg(feature = "alloc")]
pub use utils::optimization::CapacityHints;
#[cfg(feature = "alloc")]
pub use utils::optimization::FastPathDetector;
#[cfg(feature = "alloc")]
pub use utils::optimization::LazyTag;
#[cfg(feature = "alloc")]
pub use utils::optimization::NodeBuilder;
#[cfg(feature = "alloc")]
pub use utils::optimization::PerformanceOptimizer;
#[cfg(all(feature = "std", feature = "alloc"))]
#[cfg(feature = "alloc")]
pub use utils::optimization::ZeroCopyStr;
pub use utils::performance::DocumentStats;
#[cfg(all(feature = "std", feature = "alloc"))]
pub use utils::performance::Profiler;
#[cfg(feature = "std")]
pub use utils::performance::Timer;
#[cfg(feature = "std")]
pub use utils::performance::compare_performance;
#[cfg(feature = "alloc")]
pub use utils::streaming::NodeIterator;
#[cfg(feature = "alloc")]
pub use utils::streaming::NodeIteratorExt;
#[cfg(feature = "alloc")]
pub use utils::streaming::NodePath;
#[cfg(feature = "alloc")]
pub use utils::streaming::NodeStream;
#[cfg(feature = "alloc")]
pub use utils::streaming::PathSegment;
#[cfg(feature = "alloc")]
pub use utils::streaming::TraversalOrder;
#[cfg(feature = "alloc")]
pub use utils::string_interner::CommonStrings;
#[cfg(feature = "alloc")]
pub use utils::string_interner::InternedString;
#[cfg(feature = "alloc")]
pub use utils::string_interner::InternerStats;
#[cfg(feature = "alloc")]
pub use utils::string_interner::SimpleInterner;
#[cfg(feature = "std")]
pub use utils::string_interner::StringInterner;
#[cfg(feature = "validation")]
pub use validation::engine::{SchemaValidator, ValidationContext};
#[cfg(feature = "validation")]
pub use validation::schema::{ArraySchema, ObjectSchema, PropertySchema, Schema, SchemaType};
#[cfg(feature = "validation")]
pub use validation::validators::{
CustomValidator, EnumValidator, LengthValidator, PatternValidator, RangeValidator,
RequiredValidator, TypeValidator, ValidationResult, Validator,
};
#[cfg(feature = "alloc")]
pub use stringify::serializer::{Serializer, SerializerRegistry, TaggedSerializer, TypeSerializer};
#[cfg(feature = "alloc")]
pub use stringify::streaming::StreamingSerializer;
#[cfg(feature = "alloc")]
pub use testing::fuzzing::{FuzzResult, FuzzRng, YamlFuzzer, fuzz_parse, fuzz_roundtrip};
#[cfg(feature = "alloc")]
pub use testing::property::{Property, PropertyResult, PropertySuite};
#[cfg(feature = "alloc")]
pub use testing::safety::{
MemoryStats, SafetyAudit, SafetyIssue, audit_node, calculate_memory_stats,
};
#[cfg(feature = "alloc")]
pub use devtools::debug::{DebugAssert, DebugContext, DebugLevel, NodeDebugger};
#[cfg(feature = "alloc")]
pub use devtools::diff::{Diff, DiffResult, DiffType, diff_nodes};
#[cfg(feature = "alloc")]
pub use devtools::inspect::{
NodeInfo, NodeType, find_by_type, has_anchor, has_tag, node_depth, node_size, node_summary,
node_type, print_tree,
};
#[cfg(all(feature = "alloc", feature = "std"))]
pub use devtools::trace::TracedTimer;
#[cfg(feature = "alloc")]
pub use devtools::trace::{TraceEntry, TraceEvent, TraceGuard, Tracer};