module example-schema {
    prefix aha;
    namespace "http://example.com";

    import other-module {
        prefix other;
    }

    container inventory {
        container stuff {
            presence true;
        }
    }

    leaf leafUInt8 {
        type uint8;
    }

    leaf leafUInt16 {
        type uint16;
    }

    leaf leafUInt32 {
        type uint32;
    }

    leaf leafUInt64 {
        type uint64;
    }

    leaf leafInt8 {
        type int8;
    }

    leaf leafInt16 {
        type int16;
    }

    leaf leafInt32 {
        type int32;
    }

    leaf leafInt64 {
        type int64;
    }

    leaf leafString {
        type string;
    }

    leaf leafEnum {
        type enumeration {
            enum lol;
            enum data;
            enum coze;
        }
    }

    leaf leafDecimal {
        units "nm";
        type decimal64 {
            fraction-digits 9;
        }
    }

    container pContainer {
        presence true;
    }

    list person {
        key 'name';
        leaf name {
            type string;
        }
    }

    leaf bossPerson {
        type leafref {
            path '../aha:person/name';
        }
    }

    leaf unionIntString {
        type union {
            type int32;
            type string;
        }
    }

    grouping upAndDown {
        leaf up {
            type boolean;
        }
        leaf down {
            type boolean;
        }
    }

    uses upAndDown;

    container lol {
        uses upAndDown;
    }

    grouping targets_def {
        list targets {
            key 'city';
            leaf city {
                type string;
            }
        }
    }

    rpc launch-nukes {
        input {
            container payload {
                leaf kilotons {
                    type uint64;
                    mandatory true;
                    units "kilotons";
                }
            }
            leaf description {
                type string;
            }
            container cities {
                presence true;
                uses targets_def;
            }
        }
        output {
            leaf blast-radius {
                type uint32;
                units "m";
            }
            leaf actual-yield {
                type uint64;
                units "kilotons";
            }
            container damaged-places {
                presence true;
                uses targets_def;
            }
        }
    }

    rpc noop {}

    list selectedNumbers {
        key 'value';
        leaf value {
            type int8;
        }
    }

    list animalWithColor {
        key 'name color';
        leaf name {
            type string;
        }
        leaf color {
            type string;
        }
    }

    list ports {
        key 'name';
        leaf name {
            type enumeration {
                enum A;
                enum B;
                enum C;
                enum D;
                enum E;
            }
        }
    }

    list org {
        key 'department';
        leaf department {
            type string;
        }

        list people {
            key 'name';
            leaf name {
                type string;
            }

            list computers {
                key 'type';
                leaf type {
                    type enumeration {
                        enum PC;
                        enum laptop;
                        enum server;
                    }
                }
            }
        }
    }

    augment "/other:parking-lot" {
        list cars {
            key 'id';
            leaf id {
                type int32;
            }
        }
    }

    leaf temperature {
        type int32;
        config false;
    }

    identity Animal {
    }

    identity Mammal {
        base "Animal";
    }

    identity Dog {
        base "Mammal";
    }

    identity Whale {
        base "Mammal";
    }

    identity Velociraptor {
        base "Animal";
    }

    leaf beast {
        type identityref {
            base "Animal";
        }
    }

    leaf blob {
        type binary;
    }

    leaf dummy {
        type empty;
    }

    leaf-list addresses {
        type string;
    }
}
