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

    import other-module {
        prefix other;
    }

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

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