{"record":{"id":"da336677e0c085b8","repo":"tokio-rs/tokio","slug":"flavor-set-multiple-times","errorCode":null,"errorMessage":"`flavor` set multiple times.","messagePattern":"`flavor` set multiple times\\.","errorType":"validation","errorClass":"syn::Error","httpStatus":null,"severity":"error","filePath":"tokio-macros/src/entry.rs","lineNumber":116,"sourceCode":"            is_test,\n            crate_name: None,\n            unhandled_panic: None,\n        }\n    }\n\n    fn set_name(&mut self, name: syn::Lit, span: Span) -> Result<(), syn::Error> {\n        if self.name.is_some() {\n            return Err(syn::Error::new(span, \"`name` set multiple times.\"));\n        }\n\n        let runtime_name = parse_string(name, span, \"name\")?;\n        self.name = Some(runtime_name);\n        Ok(())\n    }\n\n    fn set_flavor(&mut self, runtime: syn::Lit, span: Span) -> Result<(), syn::Error> {\n        if self.flavor.is_some() {\n            return Err(syn::Error::new(span, \"`flavor` set multiple times.\"));\n        }\n\n        let runtime_str = parse_string(runtime, span, \"flavor\")?;\n        let runtime =\n            RuntimeFlavor::from_str(&runtime_str).map_err(|err| syn::Error::new(span, err))?;\n        self.flavor = Some(runtime);\n        Ok(())\n    }\n\n    fn set_worker_threads(\n        &mut self,\n        worker_threads: syn::Lit,\n        span: Span,\n    ) -> Result<(), syn::Error> {\n        if self.worker_threads.is_some() {\n            return Err(syn::Error::new(\n                span,\n                \"`worker_threads` set multiple times.\",","sourceCodeStart":98,"sourceCodeEnd":134,"githubUrl":"https://github.com/tokio-rs/tokio/blob/625954f365727668cb02d04172b34f1149637728/tokio-macros/src/entry.rs#L98-L134","documentation":"The `flavor = \"...\"` option selects the runtime flavor (`current_thread`, `local`, `multi_thread`). `set_flavor` (entry.rs:114) stores the first and rejects any second `flavor` key in the same attribute with a `syn::Error`.","triggerScenarios":"Writing `#[tokio::main(flavor = \"current_thread\", flavor = \"multi_thread\")]`.","commonSituations":"Copy-paste; switching flavor and forgetting to delete the old one; macros that compose options.","solutions":["Keep only one `flavor` argument.","Decide on the single flavor the entry point needs and delete the rest."],"exampleFix":"// before\n#[tokio::main(flavor = \"current_thread\", flavor = \"multi_thread\", worker_threads = 4)]\nasync fn main() {}\n\n// after\n#[tokio::main(flavor = \"multi_thread\", worker_threads = 4)]\nasync fn main() {}","handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":["Provide `flavor` at most once per attribute.","Decide on one runtime flavor per entry point and document why.","If you need both runtimes, use two separate `main`-style entry points or build the runtime manually."],"tags":["tokio","macros","compile-error","config","duplicate-option"],"backgroundTag":null,"analyzedSha":"625954f365727668cb02d04172b34f1149637728","analyzedAt":"2026-08-11T17:46:45.378Z","contentChangedAt":"2026-08-11T17:46:45.378Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}