leptos-rs/leptos · error

Encoding not found.

Error message

Encoding not found.

What it means

The `encoding` option (or third positional string) is validated against the set of built-in encodings known to the macro (e.g. Url, GetJson, PostJson, PostCbor, etc., matched case-insensitively). Any other value fails this check with 'Encoding not found.' at the encoding literal's span.

Solutions

  1. Use one of the supported builtin encoding strings (Url, GetText, PostText, GetBinary, PostBinary, GetJson, PostJson, PostCbor, GetCBOR-style idents are matched case-insensitively).
  2. For non-builtin serialization, omit `encoding` and specify `input`/`output` (and optionally `custom`) types instead.
  3. Check spelling/case and any recent renames of encodings in the crate docs.

Example fix

// before
#[server(encoding = "msgpack")]
// after
#[server(encoding = "PostCbor")]
// or for custom:
// #[server(input = MyInput, output = MyOutput)]
Defensive patterns

Strategy: validation

Validate before calling

const BUILTIN_ENCODINGS: &[&str] = &["url","gettext","posttext","getbinary","postbinary","getjson","postjson","postcbor"];
let enc = "msgpack";
assert!(BUILTIN_ENCODINGS.contains(&enc.to_lowercase().as_str()), "unsupported encoding: {enc}");

Prevention

When it happens

Trigger: #[server(encoding = "json")] (lowercase name not in the builtin list); misspelling like 'PostJSon' variants that don't match; passing an encoding name from a different framework; using a custom encoding that requires input/output/custom instead.

Common situations: Copying encodings from other libraries (e.g. 'msgpack' when only Cbor is builtin); typos in the encoding string; switching to custom serialization without switching options.

Related errors


AI-assisted analysis of leptos-rs/leptos@32d20f6c9d (2026-09-01). Data as JSON: /api/errors/0164ff05c9907f9c. Report an issue: GitHub.

Appendix: source

Thrown at server_fn_macro/src/lib.rs:1230

                        ));
                    }
                }
            } else if lookahead.peek(LitStr) {
                if use_key_and_value {
                    return Err(syn::Error::new(
                        stream.span(),
                        "If you use keyword arguments (e.g., `name` = \
                         Something), then you can no longer use arguments \
                         without a keyword.",
                    ));
                }
                match arg_pos {
                    1 => return Err(lookahead.error()),
                    2 => prefix = Some(stream.parse()?),
                    3 => encoding = Some(stream.parse()?),
                    4 => fn_path = Some(stream.parse()?),
                    _ => {
                        return Err(syn::Error::new(
                            stream.span(),
                            "unexpected extra argument",
                        ))
                    }
                }
            } else {
                return Err(lookahead.error());
            }

            if !stream.is_empty() {
                stream.parse::<Token![,]>()?;
            }
        }

        // parse legacy encoding into input/output
        let mut builtin_encoding = false;
        if let Some(encoding) = encoding {
            match encoding.value().to_lowercase().as_str() {

View on GitHub (pinned to 32d20f6c9d)