Readme
LibYML (a fork of unsafe-libyaml)
LibYML is a Rust library for working with YAML data, forked from unsafe-libyaml . It offers a safe and efficient interface for parsing, emitting, and manipulating YAML data.
Features
Serialization and Deserialization : Easy-to-use APIs for serializing Rust structs and enums to YAML and vice versa.
Custom Struct and Enum Support : Seamless serialization and deserialization of custom data types.
Comprehensive Error Handling : Detailed error messages and recovery mechanisms.
Streaming Support : Efficient processing of large YAML documents.
Alias and Anchor Support : Handling of complex YAML structures with references.
Tag Handling : Support for custom tags and type-specific serialization.
Configurable Emitter : Customizable YAML output generation.
Extensive Documentation : Detailed docs and examples for easy onboarding.
Safety and Efficiency : Minimized unsafe code with an interface designed to prevent common pitfalls.
Installation
Add this to your Cargo.toml :
[ dependencies ]
libyml = " 0.0.5"
Usage
Here's a quick example on how to use LibYML to parse a YAML string:
use core:: mem:: MaybeUninit;
use libyml:: {
success:: is_success,
yaml_parser_delete,
yaml_parser_initialize,
yaml_parser_parse,
yaml_parser_set_input_string,
YamlEventT,
YamlParserT,
} ;
fn main ( ) {
unsafe {
let mut parser = MaybeUninit:: < YamlParserT> :: uninit( ) ;
if is_success ( yaml_parser_initialize ( parser. as_mut_ptr ( ) ) ) {
let mut parser = parser. assume_init ( ) ;
let yaml = " {key1: value1, key2: [item1, item2]}" ;
yaml_parser_set_input_string (
& mut parser,
yaml. as_ptr ( ) ,
yaml. len ( ) as u64 ,
) ;
let mut event = MaybeUninit:: < YamlEventT> :: uninit( ) ;
let result = yaml_parser_parse ( & mut parser, event. as_mut_ptr ( ) ) ;
if is_success ( result) {
// Process the event here
} else {
// Failed to parse YAML
}
yaml_parser_delete ( & mut parser) ;
} else {
// Failed to initialize parser
}
}
}
Documentation
For full API documentation, please visit https://doc.libyml.com/libyml/ or https://docs.rs/libyml .
Rust Version Compatibility
Compiler support: requires rustc 1.56.0+
Contributing
Contributions are welcome! If you'd like to contribute, please feel free to submit a Pull Request on GitHub .
Credits and Acknowledgements
LibYML is a fork of the work done by David Tolnay and the maintainers of unsafe-libyaml . While it has evolved into a separate library, we express our sincere gratitude to them as well as the libyaml maintainers for their contributions to the Rust and C programming communities.
License
MIT license , same as libyaml.