s2rs 0.6.15

An intuitive Rust -> Scratch API library
Documentation
use crate::{Api, cursor::Cursor};
use super::{ExploreMode, Project2, utils::RequestBuilderUtils, Studio2};

pub type SearchMode = ExploreMode;

#[derive(Clone, Debug)]
pub struct SearchQuery {
    pub mode: Option<SearchMode>,
    pub query: Option<String>,
}

impl SearchQuery {
    pub fn as_query(&self) -> Vec<(&str, &str)> {
        let mut result = Vec::new();
        if let Some(query) = &self.query {
            result.push(("q", query.as_str()))
        }
        if let Some(mode) = &self.mode {
            result.push(("mode", mode.as_ref()))
        }
        result
    }
}

impl Api {
    pub async fn search_projects(&self, query: &SearchQuery, cursor: impl Into<Cursor>) -> super::Result<Vec<Project2>> {
        let response = self.get("search/projects/").query(&query.as_query()).cursor(cursor).send_success().await?;
        Ok(response.json().await?)
    }

    pub async fn search_studios(&self, query: &SearchQuery, cursor: impl Into<Cursor>) -> super::Result<Vec<Studio2>> {
        let response = self.get("search/studios/").query(&query.as_query()).cursor(cursor).send_success().await?;
        Ok(response.json().await?)
    }
}