<?xml version="1.0"?>
<doc>
    <assembly>
        <name>Eryph.GuestServices.CloudConfig.Yaml</name>
    </assembly>
    <members>
        <member name="M:Eryph.GuestServices.CloudConfig.Yaml.CloudConfigYamlSerializer.Deserialize(System.String,System.Action{System.String})">
            <summary>
            Deserialize cloud-config YAML. <paramref name="onUnknownKey"/> — when
            supplied — is invoked once per top-level key that is not present on
            <see cref="T:Eryph.GuestServices.CloudConfig.CloudConfig"/>. Mirrors cloud-init's runtime validation:
            warn-but-continue. The static parser stays logger-free so callers in
            any layer (provisioning service, validate CLI, tests) can decide
            what to do with the warnings.
            </summary>
        </member>
        <member name="T:Eryph.GuestServices.CloudConfig.Yaml.Converters.BoolOrStringYamlConverter">
            <summary>
            Type converter for <see cref="T:Eryph.GuestServices.CloudConfig.BoolOrString"/>. Mirrors PyYAML
            SafeLoader's semantics: a plain scalar matching a YAML 1.1 bool token
            becomes a bool variant, anything else (including quoted bool tokens
            and non-bool plain scalars) becomes a string variant. Empty scalars
            map to <see cref="F:Eryph.GuestServices.CloudConfig.BoolOrString.Empty"/>.
            </summary>
            <remarks>
            Registering this as an <see cref="T:YamlDotNet.Serialization.IYamlTypeConverter"/> short-circuits
            the node-deserializer dispatch — the <see cref="T:Eryph.GuestServices.CloudConfig.Yaml.Converters.Yaml11ScalarResolver"/>'s
            matching Case-B branch acts as a defensive fallback when the converter
            is not in play (e.g. constructed parsers in tests). One source of truth
            for the bool-token table lives in <see cref="T:Eryph.GuestServices.CloudConfig.Yaml.Converters.Yaml11BoolTokens"/>.
            </remarks>
        </member>
        <member name="T:Eryph.GuestServices.CloudConfig.Yaml.Converters.WriteFilePermissionsYamlConverter">
            <summary>
            Delegates octal-permission validation to
            <see cref="!:WriteFilePermissions.NewValidation"/> in the model library
            so the YAML and CLI <c>validate</c> paths agree on the rules — no
            duplicated regex / digit-count logic that could drift.
            </summary>
        </member>
        <member name="T:Eryph.GuestServices.CloudConfig.Yaml.Converters.Yaml11BoolTokens">
            <summary>
            Single source of truth for the 22 YAML 1.1 / PyYAML SafeLoader bool
            tokens. Cloud-init reads cloud-config via <c>yaml.safe_load</c>, so
            this is the set our scalar resolver and BoolOrString converter must
            recognise to stay observably equivalent.
            </summary>
        </member>
        <member name="M:Eryph.GuestServices.CloudConfig.Yaml.Converters.Yaml11BoolTokens.TryParse(System.String,System.Boolean@)">
            <summary>
            Returns <c>true</c> and the resolved bool value when <paramref name="text"/>
            is one of the 22 YAML 1.1 implicit bool tokens. Match is exact-case;
            no trimming or normalisation is performed.
            </summary>
        </member>
        <member name="M:Eryph.GuestServices.CloudConfig.Yaml.Converters.Yaml11BoolTokens.IsBoolToken(System.String)">
            <summary>
            <c>true</c> when <paramref name="text"/> matches one of the YAML 1.1
            implicit bool tokens. Convenience for callers that don't need the value.
            </summary>
        </member>
        <member name="T:Eryph.GuestServices.CloudConfig.Yaml.Converters.Yaml11IntegerTokens">
            <summary>
            Single source of truth for the YAML 1.1 / PyYAML <c>SafeLoader</c> implicit
            integer grammar. Cloud-init reads cloud-config via <c>yaml.safe_load</c>,
            which still uses the YAML 1.1 integer resolver — accepting forms that
            YamlDotNet's YAML 1.2-only parser rejects or silently mis-reads:
            leading-zero octal (<c>0644</c> → 420), underscore digit separators
            (<c>1_000</c> → 1000), and binary (<c>0b101</c> → 5). Both the scalar
            resolver's typed-int path and its <c>object?</c> path call this method so
            the two cannot drift.
            </summary>
            <remarks>
            PyYAML SafeLoader's implicit integer regex (YAML 1.1) is:
            <code>
            ^(?:[-+]?0b[0-1_]+            # binary
              |[-+]?0[0-7_]+             # octal (leading-zero form)
              |[-+]?(?:0|[1-9][0-9_]*)   # decimal
              |[-+]?0x[0-9a-fA-F_]+      # hexadecimal
              |[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)$  # sexagesimal
            </code>
            We implement every branch except the trailing sexagesimal one — see the
            deliberate carve-out in <see cref="M:Eryph.GuestServices.CloudConfig.Yaml.Converters.Yaml11IntegerTokens.TryParse(System.String,System.Int64@)"/>. We additionally accept the
            YAML 1.2 <c>0o</c> octal prefix for forward-compatibility; it is harmless
            because PyYAML's leading-zero form already covers the same values.
            </remarks>
        </member>
        <member name="M:Eryph.GuestServices.CloudConfig.Yaml.Converters.Yaml11IntegerTokens.TryParse(System.String,System.Int64@)">
            <summary>
            Returns <c>true</c> and the resolved value when <paramref name="text"/>
            is a YAML 1.1 implicit integer. Returns <c>false</c> (so callers fall
            through to float / string resolution) for anything else — including
            the deliberately-unsupported sexagesimal form.
            </summary>
        </member>
        <member name="T:Eryph.GuestServices.CloudConfig.Yaml.Converters.Yaml11ScalarResolver">
            <summary>
            PyYAML <c>SafeLoader</c>-equivalent scalar resolver. Cloud-init reads
            cloud-config via <c>yaml.safe_load</c>, which still uses the YAML 1.1
            implicit type resolver — recognising 22 bool tokens (<c>true</c>,
            <c>True</c>, <c>TRUE</c>, <c>false</c>, <c>False</c>, <c>FALSE</c>,
            <c>yes</c>, <c>Yes</c>, <c>YES</c>, <c>no</c>, <c>No</c>, <c>NO</c>,
            <c>on</c>, <c>On</c>, <c>ON</c>, <c>off</c>, <c>Off</c>, <c>OFF</c>,
            <c>y</c>, <c>Y</c>, <c>n</c>, <c>N</c>) instead of YAML 1.2's
            stripped-down six.
            </summary>
            <remarks>
            <para>
            Named for the standard (YAML 1.1) rather than the implementor (PyYAML)
            because we are emulating the standard, not the library — but cloud-
            init's reliance on PyYAML <c>SafeLoader</c> is what makes that standard
            the operator-visible contract.
            </para>
            <para>
            The resolver runs <c>Before&lt;ScalarNodeDeserializer&gt;()</c> so it
            gets a chance to intercept <c>bool</c>/<c>bool?</c>/<c>BoolOrString</c>/
            integer/<c>object</c> targets before YamlDotNet's built-in (YAML
            1.2-only) scalar parser sees them. Other expected types fall through to
            the remaining pipeline unchanged.
            </para>
            <para>
            Integer parsing follows the YAML 1.1 grammar via
            <see cref="T:Eryph.GuestServices.CloudConfig.Yaml.Converters.Yaml11IntegerTokens"/>: leading-zero octal (<c>0644</c> →
            420), underscore separators (<c>1_000</c> → 1000), binary, and hex.
            <c>WriteFilePermissions</c> is NOT affected — it has its own dedicated
            converter attached via <c>WithAttributeOverride</c>, so the
            permissions scalar never reaches this resolver as a plain int target.
            </para>
            </remarks>
        </member>
    </members>
</doc>
