misskey-api 0.2.0

API bindings of Misskey, including requests/responses of endpoints and messages on channels
Documentation
use std::io::Cursor;

use crate::model::drive::DriveFile;

use mime::Mime;
use misskey_core::{UploadFileClient, UploadFileRequest};
use misskey_http::HttpClient;
use misskey_test::env;

pub struct TestClient {
    pub admin: HttpClient,
    pub user: HttpClient,
}

impl TestClient {
    pub fn new() -> Self {
        misskey_test::init_logger();

        TestClient {
            admin: HttpClient::with_token(env::api_url(), env::admin_token()).unwrap(),
            user: HttpClient::with_token(env::api_url(), env::user_token()).unwrap(),
        }
    }
}

impl std::ops::Deref for TestClient {
    type Target = HttpClient;
    fn deref(&self) -> &HttpClient {
        &self.user
    }
}

#[async_trait::async_trait]
pub trait HttpClientExt {
    async fn test_with_file<R, B>(
        &self,
        req: R,
        mime: Mime,
        file_name: &str,
        content: B,
    ) -> R::Response
    where
        R: UploadFileRequest + Send,
        B: AsRef<[u8]> + Send + Sync;
    async fn create_text_file(&self, file_name: &str, content: &str) -> DriveFile;
}

#[async_trait::async_trait]
impl HttpClientExt for HttpClient {
    async fn test_with_file<R, B>(
        &self,
        req: R,
        mime: Mime,
        file_name: &str,
        content: B,
    ) -> R::Response
    where
        R: UploadFileRequest + Send,
        B: AsRef<[u8]> + Send + Sync,
    {
        self.request_with_file(
            req,
            mime,
            file_name.to_string(),
            Cursor::new(content.as_ref().to_vec()),
        )
        .await
        .unwrap()
        .unwrap()
    }

    async fn create_text_file(&self, file_name: &str, content: &str) -> DriveFile {
        self.test_with_file(
            crate::endpoint::drive::files::create::Request {
                folder_id: None,
                name: Some(file_name.to_string()),
                is_sensitive: None,
                force: Some(true),
            },
            mime::TEXT_PLAIN,
            file_name,
            content,
        )
        .await
    }
}