Struct Response

Source
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::Errors.

Fields§

§data: Value§errors: Vec<Error>

Implementations§

Source§

impl Response

Source

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::Errors.

Source

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");
Source

pub fn errors(&self) -> Option<Vec<Error>>

Same as values(), but returns the Asana errors (always a vector).

Source

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");

Trait Implementations§

Source§

impl<'de> Deserialize<'de> for Response

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> ErasedDestructor for T
where T: 'static,