# stable structures

This section is a work in progress.

Examples:

- audio_recorder
- ethereum_json_rpc
- func_types
- http_counter
- inline_types
- persistent-storage
- pre_and_post_upgrade
- stable_structures

    import {
        bool,
        Canister,
        nat64,
        nat8,
        Opt,
        query,
        StableBTreeMap,
        text,
        Tuple,
        update,
        Vec
    } from 'azle';

    const Key = nat8;
    type Key = typeof Key.tsType;

    const Value = text;
    type Value = typeof Value.tsType;

    let map = StableBTreeMap<Key, Value>(0);

    export default Canister({
        containsKey: query([Key], bool, (key) => {
            return map.containsKey(key);
        }),

        get: query([Key], Opt(Value), (key) => {
            return map.get(key);
        }),

        insert: update([Key, Value], Opt(Value), (key, value) => {
            return map.insert(key, value);
        }),

        isEmpty: query([], bool, () => {
            return map.isEmpty();
        }),

        items: query([], Vec(Tuple(Key, Value)), () => {
            return map.items();
        }),

        keys: query([], Vec(Key), () => {
            return Uint8Array.from(map.keys());
        }),

        len: query([], nat64, () => {
            return map.len();
        }),

        remove: update([Key], Opt(Value), (key) => {
            return map.remove(key);
        }),

        values: query([], Vec(Value), () => {
            return map.values();
        })
    });