File: directive_example.rs

package info (click to toggle)
rust-yaml-edit 0.2.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 36,676 kB
  • sloc: makefile: 2
file content (88 lines) | stat: -rw-r--r-- 2,709 bytes parent folder | download
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
use std::str::FromStr;
use yaml_edit::*;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    println!("=== YAML Directive Support Example ===\n");

    // Example 1: Parse YAML with directives
    println!("1. Parsing YAML with directives:");
    let yaml_content = r#"%YAML 1.2
%TAG ! tag:example.com,2000:app/
---
name: my-application
version: 1.0.0
"#;

    let parsed = YamlFile::from_str(yaml_content)?;
    println!("Input:\n{}", yaml_content);

    // Access directives
    let directives: Vec<_> = parsed.directives().collect();
    println!("Found {} directives:", directives.len());
    for directive in &directives {
        println!("  - {}", directive.text());
        if let Some(name) = directive.name() {
            println!("    Name: {}", name);
            if let Some(value) = directive.value() {
                println!("    Value: {}", value);
            }
        }
    }

    // Example 2: Create YAML with directives programmatically
    println!("\n2. Creating YAML with directives programmatically:");
    let yaml = YamlFile::new();

    // Add YAML version directive
    yaml.add_directive("%YAML 1.2");

    // Add TAG directive
    yaml.add_directive("%TAG ! tag:example.com,2000:app/");

    // Create a document
    let doc = Document::new_mapping();
    doc.set("application", "yaml-edit");
    doc.set("version", "0.1.0");
    doc.set("author", "Jelmer Vernooij");

    yaml.push_document(doc);

    println!("Generated YAML:\n{}", yaml);

    // Example 3: Working with different directive types
    println!("\n3. Creating specific directive types:");

    let yaml_dir = Directive::new_yaml_version("1.2");
    println!("YAML version directive: {}", yaml_dir.text());
    println!("Is YAML version: {}", yaml_dir.is_yaml_version());

    let tag_dir = Directive::new_tag("!local!", "tag:local.example.com,2000:");
    println!("TAG directive: {}", tag_dir.text());
    println!("Is TAG directive: {}", tag_dir.is_tag());

    // Example 4: Document preservation
    println!("\n4. Document preservation test:");
    let complex_yaml = r#"%YAML 1.2
%TAG !local! tag:local.example.com,2000:
%TAG !example! tag:example.com,2000:
---
name: !local!string "my-app"
version: "1.0"
dependencies: !example!list
  - yaml-edit
  - serde
---
second_doc: value
"#;

    let parsed_complex = YamlFile::from_str(complex_yaml)?;
    println!("Original:\n{}", complex_yaml);
    println!("Parsed and serialized:\n{}", parsed_complex);

    let dirs: Vec<_> = parsed_complex.directives().collect();
    println!("Preserved {} directives", dirs.len());
    let docs: Vec<_> = parsed_complex.documents().collect();
    println!("Preserved {} documents", docs.len());

    Ok(())
}