-
Notifications
You must be signed in to change notification settings - Fork 94
/
enumeration.rs
63 lines (57 loc) · 2.18 KB
/
enumeration.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
use crate::*;
#[near_bindgen]
impl Contract {
//Query for the total supply of NFTs on the contract
pub fn nft_total_supply(&self) -> U128 {
/*
FILL THIS IN
*/
todo!(); //remove once code is filled in.
}
//Query for nft tokens on the contract regardless of the owner using pagination
pub fn nft_tokens(&self, from_index: Option<U128>, limit: Option<u64>) -> Vec<JsonToken> {
/*
FILL THIS IN
*/
todo!(); //remove once code is filled in.
}
//get the total supply of NFTs for a given owner
pub fn nft_supply_for_owner(
&self,
account_id: AccountId,
) -> U128 {
/*
FILL THIS IN
*/
todo!(); //remove once code is filled in.
}
//Query for all the tokens for an owner
pub fn nft_tokens_for_owner(
&self,
account_id: AccountId,
from_index: Option<U128>,
limit: Option<u64>,
) -> Vec<JsonToken> {
//get the set of tokens for the passed in owner
let tokens_for_owner_set = self.tokens_per_owner.get(&account_id);
//if there is some set of tokens, we'll set the tokens variable equal to that set
let tokens = if let Some(tokens_for_owner_set) = tokens_for_owner_set {
tokens_for_owner_set
} else {
//if there is no set of tokens, we'll simply return an empty vector.
return vec![];
};
//where to start pagination - if we have a from_index, we'll use that - otherwise start from 0 index
let start = u128::from(from_index.unwrap_or(U128(0)));
//iterate through the keys vector
tokens.iter()
//skip to the index we specified in the start variable
.skip(start as usize)
//take the first "limit" elements in the vector. If we didn't specify a limit, use 50
.take(limit.unwrap_or(50) as usize)
//we'll map the token IDs which are strings into Json Tokens
.map(|token_id| self.nft_token(token_id.clone()).unwrap())
//since we turned the keys into an iterator, we need to turn it back into a vector to return
.collect()
}
}