hashavatar 1.1.0

Stable deterministic procedural avatars in Rust with configurable identity hashing, WebP, optional PNG/JPEG/GIF, and SVG export
Documentation
use super::*;

pub(crate) fn render_coffee_cup_svg(spec: AvatarSpec, identity: &AvatarIdentity) -> String {
    let w = spec.width as f32;
    let h = spec.height as f32;
    let cx = w / 2.0;
    let cy = h * 0.58;
    let cw = w * 0.38;
    let ch = h * 0.32;
    let cup = hsl_to_color(20.0 + identity.unit_f32(1) * 35.0, 0.42, 0.60);
    let coffee = hsl_to_color(24.0 + identity.unit_f32(2) * 18.0, 0.42, 0.26);
    format!(
        r##"<rect x="{x}" y="{y}" width="{cw}" height="{ch}" fill="{cup}"/><ellipse cx="{cx}" cy="{top}" rx="{rx}" ry="{ery}" fill="{coffee}"/><ellipse cx="{hx}" cy="{hy}" rx="{hrx}" ry="{hry}" fill="none" stroke="{cup}" stroke-width="5"/><rect x="{px}" y="{py}" width="{pw}" height="{ph}" fill="#50372a" opacity="0.7"/><path d="M {s1} {sy} L {s1e} {sy2} M {s2} {sy} L {s2e} {sy2} M {s3} {sy} L {s3e} {sy2}" stroke="#786252" stroke-width="3" opacity="0.55" stroke-linecap="round"/>"##,
        x = cx - cw / 2.0,
        y = cy - ch / 2.0,
        cw = cw,
        ch = ch,
        cup = color_hex(cup),
        cx = cx,
        top = cy - ch / 2.0,
        rx = cw / 2.0,
        ery = ch / 7.0,
        coffee = color_hex(coffee),
        hx = cx + cw / 2.0,
        hy = cy - ch / 10.0,
        hrx = cw / 4.0,
        hry = ch / 4.0,
        px = cx - cw * 0.60,
        py = cy + ch / 2.0,
        pw = cw * 1.20,
        ph = ch / 8.0,
        s1 = cx - cw / 5.0,
        s2 = cx,
        s3 = cx + cw / 5.0,
        sy = cy - ch,
        s1e = cx - cw / 10.0,
        s2e = cx + cw / 10.0,
        s3e = cx + cw * 0.30,
        sy2 = cy - ch * 1.33,
    )
}