Basic Usage

The following example shows how to use MultiIndex


#![allow(unused)]
#![cfg_attr(not(feature = "std"), no_std)]

fn main() {
#[eosio_chain::contract]
mod mi_example {
    use eosio_chain::{
        Name,
        name,
        eosio_println,
    };

    #[derive(Default)]
    pub struct MyData1 {
        key: u64,
        count: u64,
    }

    impl ::eosio_chain::serializer::Packer for MyData1 {
        fn size(&self) -> usize {
            let mut _size: usize = 0;
            _size += self.key.size();
            _size += self.count.size();
            return _size;
        }
        fn pack(&self) -> Vec<u8> {
            let mut enc = ::eosio_chain::serializer::Encoder::new(self.size());
            enc.pack::<u64>(&self.key);
            enc.pack::<u64>(&self.count);
            return enc.get_bytes();
        }
        fn unpack(&mut self, data: &[u8]) -> usize {
            let mut dec = ::eosio_chain::serializer::Decoder::new(data);
            dec.unpack::<u64>(&mut self.key);
            dec.unpack::<u64>(&mut self.count);
            return dec.get_pos();
        }
    }

    impl ::eosio_chain::db::PrimaryValueInterface for MyData1 {
        fn get_primary(&self) -> u64 {
            return self.key.to_primary_value();
        }
    }

    impl ::eosio_chain::db::SecondaryValueInterface for MyData1 {
        #[allow(unused_variables, unused_mut)]
        fn get_secondary_value(&self, i: usize) -> eosio_chain::db::SecondaryValue {
            return eosio_chain::db::SecondaryValue::None;
        }

        #[allow(unused_variables, unused_mut)]
        fn set_secondary_value(&mut self, i: usize, value: eosio_chain::db::SecondaryValue) {}
    }

    #[chain(main)]
    #[allow(dead_code)]
    pub struct Contract {
        receiver: Name,
        first_receiver: Name,
        action: Name,
    }

    impl Contract {
        pub fn new(receiver: Name, first_receiver: Name, action: Name) -> Self {
            Self {
                receiver: receiver,
                first_receiver: first_receiver,
                action: action,
            }
        }

        #[chain(action = "inc")]
        pub fn inc_count(&self) {
            let indexes: [eosio_chain::db::SecondaryType; 0usize] = [];

            #[allow(dead_code)]
            fn unpacker(data: &[u8]) -> MyData1 {
                let mut ret = MyData1::default();
                ret.unpack(data);
                return ret;
            }
            let code = self.receiver;
            let scope = Name::from_u64(0);
            let mi = eosio_chain::mi::MultiIndex::new(code, scope, name!("mydata1"), &indexes, unpacker);
            let it = mi.find(1);

            let ram_payer = self.receiver;
            if let Some(mut value) = it.get_value() {
                value.count += 1;
                mi.update(&it, &value, ram_payer);
                eosio_println!("++++++count:", value.count);
            } else {
                let value = MyData1{
                    key: 1,
                    count: 1,
                };
                mi.store(&value, ram_payer);
                eosio_println!("++++++count:", value.count);
            }
        }
    }
}
}

A Basic Example


#![allow(unused)]

fn main() {
}

MultiIndex methods

new


#![allow(unused)]
fn main() {
pub fn new<'a>(code: Name, scope: Name, table: Name, indexes: &[SecondaryType], unpacker: fn(&[u8]) -> T) -> Self
}

set


#![allow(unused)]
fn main() {
pub fn set<'a>(&self, key: u64, value: &'a T, payer: Name) -> Iterator
}

store


#![allow(unused)]
fn main() {
pub fn store<'a>(&self, value: &'a T, payer: Name) -> Iterator
}

update


#![allow(unused)]
fn main() {
pub fn update<'a>(&self, iterator: Iterator, value: &'a T, payer: Name)
}

remove


#![allow(unused)]
fn main() {
pub fn remove(&self, iterator: Iterator)
}

get


#![allow(unused)]
fn main() {
pub fn get(&self, iterator: Iterator) -> Option<T>
}

get_by_primary


#![allow(unused)]
fn main() {
pub fn get_by_primary(&self, primary: u64) -> Option<T>
}

next


#![allow(unused)]
fn main() {
pub fn next(&self, iterator: Iterator) -> (Iterator, u64)
}

previous


#![allow(unused)]
fn main() {
pub fn previous(&self, iterator: Iterator) -> (Iterator, u64)
}

find


#![allow(unused)]
fn main() {
pub fn find(&self, id: u64) -> Iterator
}

lowerbound


#![allow(unused)]
fn main() {
pub fn lowerbound(&self, id: u64) -> Iterator
}

upperbound


#![allow(unused)]
fn main() {
pub fn upperbound(&self, id: u64) -> Iterator
}

end


#![allow(unused)]
fn main() {
pub fn end(&self) -> Iterator
}