(&mut self)
| 2395 | } |
| 2396 | |
| 2397 | fn parse_csr_connection_avro(&mut self) -> Result<CsrConnectionAvro<Raw>, ParserError> { |
| 2398 | let connection = self.parse_csr_connection_reference()?; |
| 2399 | let seed = if self.parse_keyword(SEED) { |
| 2400 | let key_schema = if self.parse_keyword(KEY) { |
| 2401 | self.expect_keyword(SCHEMA)?; |
| 2402 | Some(self.parse_literal_string()?) |
| 2403 | } else { |
| 2404 | None |
| 2405 | }; |
| 2406 | |
| 2407 | // Parse KEY REFERENCES if present (only valid if we have a key schema) |
| 2408 | let key_reference_schemas = |
| 2409 | if key_schema.is_some() && self.parse_keywords(&[KEY, REFERENCES]) { |
| 2410 | self.expect_token(&Token::LParen)?; |
| 2411 | let refs = self.parse_comma_separated(|p| p.parse_literal_string())?; |
| 2412 | self.expect_token(&Token::RParen)?; |
| 2413 | refs |
| 2414 | } else { |
| 2415 | vec![] |
| 2416 | }; |
| 2417 | |
| 2418 | self.expect_keywords(&[VALUE, SCHEMA])?; |
| 2419 | let value_schema = self.parse_literal_string()?; |
| 2420 | |
| 2421 | // Parse VALUE REFERENCES if present |
| 2422 | let value_reference_schemas = if self.parse_keywords(&[VALUE, REFERENCES]) { |
| 2423 | self.expect_token(&Token::LParen)?; |
| 2424 | let refs = self.parse_comma_separated(|p| p.parse_literal_string())?; |
| 2425 | self.expect_token(&Token::RParen)?; |
| 2426 | refs |
| 2427 | } else { |
| 2428 | vec![] |
| 2429 | }; |
| 2430 | |
| 2431 | Some(CsrSeedAvro { |
| 2432 | key_schema, |
| 2433 | value_schema, |
| 2434 | key_reference_schemas, |
| 2435 | value_reference_schemas, |
| 2436 | }) |
| 2437 | } else { |
| 2438 | None |
| 2439 | }; |
| 2440 | |
| 2441 | let mut parse_schema_strategy = |
| 2442 | |kws| -> Result<Option<ReaderSchemaSelectionStrategy>, ParserError> { |
| 2443 | if self.parse_keywords(kws) { |
| 2444 | Ok(Some( |
| 2445 | match self.expect_one_of_keywords(&[ID, LATEST, INLINE])? { |
| 2446 | ID => { |
| 2447 | let pos = self.index; |
| 2448 | ReaderSchemaSelectionStrategy::ById( |
| 2449 | self.parse_literal_int()?.try_into().map_err(|_| { |
| 2450 | ParserError::new(pos, "Expected a 32-bit integer") |
| 2451 | })?, |
| 2452 | ) |
| 2453 | } |
| 2454 | LATEST => ReaderSchemaSelectionStrategy::Latest, |
no test coverage detected