pub struct Response {
pub data: Value,
pub errors: Vec<Error>,
}
Expand description
Represents a response from Asana
This is a JSON object that could have 2 (or more idk) keys: “data” or “errors”. You can deserialize a payload from the Asana API into one of these.
You can use value()
or values()
to get the data returned by Asana, serialized into one
of the structs in the schema
module. You can use errors()
to return a
vector of schema::Error
s.
Fields§
§data: Value
§errors: Vec<Error>
Implementations§
Source§impl Response
impl Response
Sourcepub fn into<T: DeserializeOwned>(self) -> Result<T, Vec<Error>>
pub fn into<T: DeserializeOwned>(self) -> Result<T, Vec<Error>>
Consumes the response, returning Ok()
with the type provided or
Err()
with a vector of schema::Error
s.
Sourcepub fn value<T: DeserializeOwned>(&self) -> Option<T>
pub fn value<T: DeserializeOwned>(&self) -> Option<T>
Returns the single value of type T. If Asana returns an array of objects,
this will return None. See values()
.
use rust_asana::Response;
use rust_asana::schema::UserCompact;
// This is UserCompact object, defined by Asana
let payload = r#"{
"data": {
"gid": "12345",
"resource_type": "user",
"name": "Greg Sanchez"
}
}"#;
let resp = serde_json::from_str::<Response>(&payload).unwrap();
let user = resp.value::<UserCompact>();
assert!(user.is_some());
assert_eq!(user.unwrap().name, "Greg Sanchez");
Sourcepub fn errors(&self) -> Option<Vec<Error>>
pub fn errors(&self) -> Option<Vec<Error>>
Same as values()
, but returns the Asana errors (always a vector).
Sourcepub fn values<T: DeserializeOwned>(&self) -> Option<Vec<T>>
pub fn values<T: DeserializeOwned>(&self) -> Option<Vec<T>>
This is the same as value()
, but it returns a vector of values. Some requests
from Asana return an array of values, which this is meant for.
Important Note: This methid will work on a payload of only one object. It
will convert it to a vector of one item. As long as there is serializable data in the
data
field of the payload, this will return the object(s).
If the response is an empty array, this will return Some([]), not None
use rust_asana::Response;
use rust_asana::schema::UserCompact;
// This is UserCompact object, defined by Asana
let payload = r#"{
"data": [
{
"gid": "12345",
"resource_type": "user",
"name": "Greg Sanchez"
},
{
"gid": "54321",
"resource_type": "user",
"name": "Luke Lastname"
}
]
}"#;
let resp = serde_json::from_str::<Response>(&payload).unwrap();
let user = resp.values::<UserCompact>();
assert!(user.is_some());
assert_eq!(user.unwrap()[0].name, "Greg Sanchez");