diff options
Diffstat (limited to 'src/model/utils.rs')
| -rw-r--r-- | src/model/utils.rs | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/model/utils.rs b/src/model/utils.rs index 897eb62..e499fd2 100644 --- a/src/model/utils.rs +++ b/src/model/utils.rs @@ -5,6 +5,7 @@ use super::{ Emoji, EmojiId, Member, + Message, Presence, ReadState, Relationship, @@ -173,6 +174,35 @@ pub fn decode_roles(value: Value) -> Result<HashMap<RoleId, Role>> { Ok(roles) } +pub fn decode_search_results(value: Value) -> Result<Vec<Vec<Message>>> { + let array = match value { + Value::Array(v) => v, + value => return Err(Error::Decode("Expected message set array", value)), + }; + + let mut sets: Vec<Vec<Message>> = vec![]; + + for arr in array { + let arr = match arr { + Value::Array(v) => v, + value => return Err(Error::Decode("Expected message set array", value)), + }; + + let mut messages: Vec<Message> = vec![]; + + for item in arr { + messages.push(match item { + Value::Object(v) => try!(Message::decode(Value::Object(v))), + value => return Err(Error::Decode("Expected search message", value)), + }); + } + + sets.push(messages); + } + + Ok(sets) +} + pub fn decode_shards(value: Value) -> Result<[u64; 2]> { let array = into_array(value)?; |