service CodecTest {
    functions {
        /// Available via both codecs (default)
        @entry_id: 0
        BothMethod(p1: u32) -> string;
        /// SCALE only
        @entry_id: 1
        @codec: scale
        ScaleOnly(p1: u32) -> u32;
        /// Ethabi only — should be excluded from JS client
        @entry_id: 2
        @codec: ethabi
        EthabiOnly(p1: u32) -> u32;
        /// Query available via both
        @entry_id: 3
        @query
        BothQuery(p1: bool) -> bool;
        /// Query ethabi only — should be excluded
        @entry_id: 4
        @query
        @codec: ethabi
        EthabiQuery(p1: bool) -> bool;
    }
    events {
        /// Available through both codecs
        @entry_id: 0
        BothEvent(u32),
        /// SCALE only
        @entry_id: 1
        @codec: scale
        ScaleOnlyEvent(u32),
        /// Ethabi only, should be excluded from JS event subscriptions
        @entry_id: 2
        @codec: ethabi
        EthabiOnlyEvent(u32),
    }
}

program CodecProgram {
    services {
        CodecTest
    }
}
