cube-js/cube · error · syn::Error
unknown native_bridge flag (expected `without_imports` or `w
Error message
unknown native_bridge flag (expected `without_imports` or `with_static_meta`)
What it means
The #[native_bridge] attribute macro only accepts two helper flags: `without_imports` and `with_static_meta`. When a flag-like attribute argument (looks_like_flag) is present but matches neither known name, the macro bails out and emits this compile error so the developer knows the attribute is misspelled or unsupported.
Source
Thrown at rust/cube/cubesqlplanner/nativebridge/src/lib.rs:25
use syn::token::PathSep;
use syn::LitStr;
use syn::{
parse_macro_input, punctuated::Punctuated, Data, DeriveInput, Fields, FnArg, Item, Meta, Pat,
Path, PathArguments, PathSegment, ReturnType, TraitItem, TraitItemFn, Type,
};
#[proc_macro_attribute]
pub fn native_bridge(args: TokenStream, input: TokenStream) -> proc_macro::TokenStream {
let mut svc = parse_macro_input!(input as NativeService);
let args = parse_macro_input!(args with Punctuated::<Meta, syn::Token![,]>::parse_terminated);
for arg in args.iter() {
match arg {
Meta::Path(p) => {
if p.is_ident("without_imports") {
svc.without_imports = true;
} else if p.is_ident("with_static_meta") {
svc.with_static_meta = true;
} else if looks_like_flag(p) {
return syn::Error::new(
p.span(),
"unknown native_bridge flag (expected `without_imports` or `with_static_meta`)",
)
.to_compile_error()
.into();
} else {
svc.static_data_type = Some(p.clone())
}
}
_ => {}
}
}
proc_macro::TokenStream::from(svc.into_token_stream())
}
fn looks_like_flag(path: &Path) -> bool {
if path.segments.len() != 1 {View on GitHub (pinned to 7d981676b3)
Solutions
- Replace the unknown flag with `without_imports` or `with_static_meta` exactly as spelled (lowercase snake_case).
- If the intent was to skip generated imports, use `#[native_bridge(without_imports)]`.
- If the intent was to embed static metadata, use `#[native_bridge(with_static_meta)]`.
- Check the nativebridge crate version in Cargo.toml and its docs — the set of supported flags may differ between versions.
Example fix
// before
#[native_bridge(without_import)]
trait MyService { }
// after
#[native_bridge(without_imports)]
trait MyService { } Defensive patterns
Strategy: validation
Validate before calling
// Check attribute flags before compiling
const ALLOWED: [&str; 2] = ["without_imports", "with_static_meta"];
fn valid_flags(attrs: &[&str]) -> bool {
attrs.iter().all(|a| ALLOWED.contains(a))
}
// usage: assert!(valid_flags(&["without_imports"])); Prevention
- Copy flag names directly from the nativebridge docs or lib.rs source
- Enable rust-analyzer inline errors so the macro error surfaces immediately
- Grep the crate for `is_ident(` to list all accepted flags for your version
When it happens
Trigger: Annotating a trait with #[native_bridge(...)] and passing an unrecognized flag such as #[native_bridge(without_import)], #[native_bridge(With_Static_Meta)], #[native_bridge(no_imports)], or any typo/renamed flag inside the parentheses.
Common situations: Typos or singular/plural mistakes when copying examples, renaming of flags across crate versions, or inventing a flag assuming the macro supports it (e.g. trying to disable imports with a different name).
Related errors
- Only trait can be annotated as a service
- Return type should be {}
- Return type should be Result<_>
- Return type should be {expected_type}
- Return type should be Result<Option<_>>
AI-assisted analysis of cube-js/cube@7d981676b3 (2026-09-02).
Data as JSON: /api/errors/b7c64ee1272bb58e.
Report an issue: GitHub.