module example-schema {
    yang-version 1.1;
    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;
        }
    }

    typedef myType {
        type int32;
        description "My type.";
    }

    leaf typedefedLeaf {
        type myType;
        description "This is a typedefed leaf.";
    }

    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 fire {
        input {
            leaf whom {
                type leafref {
                    path '/aha:person/name';
                }
            }
        }
    }

    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;
            }
        }

        action shutdown {
            output {
                leaf success {
                    mandatory true;
                    type boolean;
                }
            }
        }
    }

    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;
    }

    leaf-list protocols {
        type string;
        ordered-by user;
    }

    list players {
        key "name";
        ordered-by user;
        leaf name {
            type string;
        }
    }

    list point {
        key "x y";
        leaf x {
            type int32;
        }
        leaf y {
            type int32;
        }
    }

    leaf flags {
        type bits {
            bit carry;
            bit zero;
            bit sign;
            bit parity;
        }
    }

    container users {
        config false;
        list userList {
            leaf name {
                type string;
            }
            leaf otherfield {
                type string;
            }
        }
    }

}
