Skip to main content

komga_sdk/apis/
fonts_api.rs

1/*
2 * Komga API
3 *
4 * Komga REST API.  ## Reference  Check the API reference: - on the [Komga website](https://komga.org/docs/openapi/komga-api) - on any running Komga instance at `/swagger-ui.html` - on [GitHub](https://raw.githubusercontent.com/gotson/komga/refs/heads/master/komga/docs/openapi.json)  ## Authentication  Most endpoints require authentication. Authentication is done using either: - Basic Authentication - Passing an API Key in the `X-API-Key` header  ## Sessions  Upon successful authentication, a session is created, and can be reused.  - By default, a `KOMGA-SESSION` cookie is set via `Set-Cookie` response header. This works well for browsers and clients that can handle cookies. - If you specify a header `X-Auth-Token` during authentication, the session ID will be returned via this same header. You can then pass that header again for subsequent requests to reuse the session.  If you need to set the session cookie later on, you can call `/api/v1/login/set-cookie` with `X-Auth-Token`. The response will contain the `Set-Cookie` header.  ## Remember Me  During authentication, if a request parameter `remember-me` is passed and set to `true`, the server will also return a `komga-remember-me` cookie. This cookie will be used to login automatically even if the session has expired.  ## Logout  You can explicitly logout an existing session by calling `/api/logout`. This would return a `204`.  ## Deprecation  API endpoints marked as deprecated will be removed in the next major version.
5 *
6 * The version of the OpenAPI document: 1.23.4
7 * 
8 * Generated by: https://openapi-generator.tech
9 */
10
11
12use reqwest;
13use serde::{Deserialize, Serialize, de::Error as _};
14use crate::{apis::ResponseContent, models};
15use super::{Error, configuration, ContentType};
16
17
18/// struct for typed errors of method [`get_font_family_as_css`]
19#[derive(Debug, Clone, Serialize, Deserialize)]
20#[serde(untagged)]
21pub enum GetFontFamilyAsCssError {
22    Status400(models::ValidationErrorResponse),
23    UnknownValue(serde_json::Value),
24}
25
26/// struct for typed errors of method [`get_font_file`]
27#[derive(Debug, Clone, Serialize, Deserialize)]
28#[serde(untagged)]
29pub enum GetFontFileError {
30    Status400(models::ValidationErrorResponse),
31    UnknownValue(serde_json::Value),
32}
33
34/// struct for typed errors of method [`get_fonts`]
35#[derive(Debug, Clone, Serialize, Deserialize)]
36#[serde(untagged)]
37pub enum GetFontsError {
38    Status400(models::ValidationErrorResponse),
39    UnknownValue(serde_json::Value),
40}
41
42
43/// Download a CSS file with the @font-face block for the font family. This is used by the Epub Reader to change fonts.
44pub async fn get_font_family_as_css(configuration: &configuration::Configuration, font_family: &str) -> Result<reqwest::Response, Error<GetFontFamilyAsCssError>> {
45    // add a prefix to parameters to efficiently prevent name collisions
46    let p_path_font_family = font_family;
47
48    let uri_str = format!("{}/api/v1/fonts/resource/{fontFamily}/css", configuration.base_path, fontFamily=crate::apis::urlencode(p_path_font_family));
49    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
50
51    if let Some(ref user_agent) = configuration.user_agent {
52        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
53    }
54
55    let req = req_builder.build()?;
56    let resp = configuration.client.execute(req).await?;
57
58    let status = resp.status();
59
60    if !status.is_client_error() && !status.is_server_error() {
61        Ok(resp)
62    } else {
63        let content = resp.text().await?;
64        let entity: Option<GetFontFamilyAsCssError> = serde_json::from_str(&content).ok();
65        Err(Error::ResponseError(ResponseContent { status, content, entity }))
66    }
67}
68
69pub async fn get_font_file(configuration: &configuration::Configuration, font_family: &str, font_file: &str) -> Result<reqwest::Response, Error<GetFontFileError>> {
70    // add a prefix to parameters to efficiently prevent name collisions
71    let p_path_font_family = font_family;
72    let p_path_font_file = font_file;
73
74    let uri_str = format!("{}/api/v1/fonts/resource/{fontFamily}/{fontFile}", configuration.base_path, fontFamily=crate::apis::urlencode(p_path_font_family), fontFile=crate::apis::urlencode(p_path_font_file));
75    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
76
77    if let Some(ref user_agent) = configuration.user_agent {
78        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
79    }
80
81    let req = req_builder.build()?;
82    let resp = configuration.client.execute(req).await?;
83
84    let status = resp.status();
85
86    if !status.is_client_error() && !status.is_server_error() {
87        Ok(resp)
88    } else {
89        let content = resp.text().await?;
90        let entity: Option<GetFontFileError> = serde_json::from_str(&content).ok();
91        Err(Error::ResponseError(ResponseContent { status, content, entity }))
92    }
93}
94
95/// List all available font families.
96pub async fn get_fonts(configuration: &configuration::Configuration, ) -> Result<Vec<String>, Error<GetFontsError>> {
97
98    let uri_str = format!("{}/api/v1/fonts/families", configuration.base_path);
99    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
100
101    if let Some(ref user_agent) = configuration.user_agent {
102        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
103    }
104    if let Some(ref apikey) = configuration.api_key {
105        let key = apikey.key.clone();
106        let value = match apikey.prefix {
107            Some(ref prefix) => format!("{} {}", prefix, key),
108            None => key,
109        };
110        req_builder = req_builder.header("X-API-Key", value);
111    };
112    if let Some(ref auth_conf) = configuration.basic_auth {
113        req_builder = req_builder.basic_auth(auth_conf.0.to_owned(), auth_conf.1.to_owned());
114    };
115
116    let req = req_builder.build()?;
117    let resp = configuration.client.execute(req).await?;
118
119    let status = resp.status();
120    let content_type = resp
121        .headers()
122        .get("content-type")
123        .and_then(|v| v.to_str().ok())
124        .unwrap_or("application/octet-stream");
125    let content_type = super::ContentType::from(content_type);
126
127    if !status.is_client_error() && !status.is_server_error() {
128        let content = resp.text().await?;
129        match content_type {
130            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
131            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `Vec&lt;String&gt;`"))),
132            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;String&gt;`")))),
133        }
134    } else {
135        let content = resp.text().await?;
136        let entity: Option<GetFontsError> = serde_json::from_str(&content).ok();
137        Err(Error::ResponseError(ResponseContent { status, content, entity }))
138    }
139}
140