use std::fmt::Display;
use base64::{prelude::BASE64_STANDARD, Engine};
use serde::Serialize;
use uuid::Uuid;
use crate::{models::*, prelude::*, Result};
use super::usermedia::PackageMetadata;
impl Client {
pub async fn submit_package(
&self,
upload_uuid: Uuid,
mut metadata: PackageMetadata,
) -> Result<PackageSubmissionResult> {
let url = self.url("/experimental/submission/submit");
metadata.upload_uuid = Some(upload_uuid);
let response = self.post_json(url, &metadata).await?.json().await?;
Ok(response)
}
pub async fn validate_icon(&self, data: impl AsRef<[u8]>) -> Result<bool> {
let icon_data = BASE64_STANDARD.encode(data);
self.validate("/icon", IconValidatorParams { icon_data })
.await
}
pub async fn validate_manifest_v1(
&self,
namespace: impl Into<String>,
content: impl Into<String>,
) -> Result<bool> {
self.validate(
"/manifest-v1",
ManifestV1ValidatorParams {
namespace: namespace.into(),
manifest_data: content.into(),
},
)
.await
}
pub async fn validate_readme(&self, content: impl Into<String>) -> Result<bool> {
self.validate(
"/readme",
ReadmeValidatorParams {
readme_data: content.into(),
},
)
.await
}
async fn validate(&self, path: impl Display, params: impl Serialize) -> Result<bool> {
let url = self.url(format_args!("/experimental/submission/validate{path}"));
let response: ValidatorResponse = self.post_json(url, ¶ms).await?.json().await?;
Ok(response.success)
}
}