This repository has been archived on 2025-01-27. You can view files and clone it, but cannot push or open issues or pull requests.
puyoskey-firefish/packages/backend-rs/src/misc/random_icon.rs
HidemaruOwO 41186813ed ♻️ Refer develop version firefish (Cargo.lock, Cargo.toml, locales/ca-ES.yml, package.json, packages/backend-rs/src/cache/redis.rs, packages/backend-rs/src/database/redis.rs, packages/backend-rs/src/federation/activitypub/object/follow.rs, packages/backend-rs/src/federation/activitypub/object/like.rs, packages/backend-rs/src/federation/activitypub/object/relay.rs, packages/backend-rs/src/federation/internal_actor/instance.rs, packages/backend-rs/src/federation/internal_actor/relay.rs, packages/backend-rs/src/federation/nodeinfo/fetch.rs, packages/backend-rs/src/federation/nodeinfo/generate.rs, packages/backend-rs/src/misc/convert_host.rs, packages/backend-rs/src/misc/emoji.rs, packages/backend-rs/src/misc/emoji/reaction.rs, packages/backend-rs/src/misc/get_image_size.rs, packages/backend-rs/src/misc/latest_version.rs, packages/backend-rs/src/misc/password.rs, packages/backend-rs/src/misc/random_icon.rs, packages/backend-rs/src/misc/should_nyaify.rs, packages/backend-rs/src/misc/translate.rs, packages/backend-rs/src/service/antenna/check_hit.rs, packages/backend-rs/src/service/antenna/process_new_note.rs, packages/backend-rs/src/service/push_notification.rs, packages/backend-rs/src/service/stream.rs, packages/backend-rs/src/util/error_chain.rs, packages/backend-rs/src/util/http_client.rs, packages/backend/assets/resource-unknown.svg, packages/backend/package.json, packages/client/package.json, packages/client/src/components/MkInstanceCardMini.vue, packages/client/src/components/MkInstanceTicker.vue, packages/client/src/components/MkUrlPreview.vue, packages/client/src/ui/_common_/statusbar-federation.vue, packages/client/src/widgets/federation.vue, packages/client/src/widgets/instance-cloud.vue, packages/firefish-js/package.json, packages/macro-rs/macros-impl/Cargo.toml, packages/macro-rs/macros-impl/src/lib.rs, packages/macro-rs/macros-impl/src/napi.rs, packages/macro-rs/macros/src/lib.rs, packages/sw/package.json, pnpm-lock.yaml)
2024-08-24 09:40:20 +09:00

43 lines
1.2 KiB
Rust

use crate::cache;
use chrono::Duration;
use identicon_rs::{error::IdenticonError, Identicon};
#[error_doc::errors]
pub enum Error {
#[doc = "Failed to generate identicon"]
#[error(transparent)]
Identicon(#[from] IdenticonError),
#[error("Redis cache operation has failed")]
Cache(#[from] cache::redis::Error),
}
pub async fn generate(id: &str) -> Result<Vec<u8>, Error> {
if let Some(icon) = cache::get_one::<Vec<u8>>(cache::Category::RandomIcon, id).await? {
Ok(icon)
} else {
let icon = Identicon::new(id)
.set_border(16)
.set_scale(96)?
.export_png_data()?;
cache::set_one(
cache::Category::RandomIcon,
id,
&icon,
Duration::minutes(10),
)
.await?;
Ok(icon)
}
}
#[cfg(feature = "napi")]
#[napi_derive::napi(js_name = "genIdenticon")]
pub async fn generate_js(id: String) -> napi::Result<napi::bindgen_prelude::Buffer> {
match generate(&id).await {
Ok(icon) => Ok(icon.into()),
Err(err) => Err(napi::Error::from_reason(format!(
"\n{}\n",
crate::util::error_chain::format_error(&err)
))),
}
}