torbox-core-rs 0.1.0

Rust SDK Core for the torbox API
Documentation
use serde::{Deserialize, Serialize, de::DeserializeOwned};

use crate::{
    error::{ApiError, ErrorValue},
    traits::FromBytes,
};

#[derive(Serialize, Deserialize, Debug)]
#[cfg_attr(feature = "specta", derive(specta::Type))]
pub struct ApiResponse<T> {
    pub success: bool,
    pub error: Option<ErrorValue>,
    pub detail: Option<String>,
    pub data: Option<T>,
}

impl<T> FromBytes for ApiResponse<T>
where
    T: DeserializeOwned,
{
    fn from_bytes(bytes: Vec<u8>) -> Result<Self, ApiError> {
        serde_json::from_slice(&bytes).map_err(ApiError::from)
    }
}

impl<T> ApiResponse<T> {
    pub fn map<U, F: FnOnce(T) -> U>(self, f: F) -> ApiResponse<U> {
        ApiResponse {
            success: self.success,
            error: self.error,
            detail: self.detail,
            data: self.data.map(f),
        }
    }
}