MCPcopy Create free account
hub / github.com/apache/avro-rs / parse_fixed

Method parse_fixed

avro/src/schema/parser.rs:752–791  ·  view source on GitHub ↗

Parse a `serde_json::Value` representing a Avro fixed type into a `Schema`.

(
        &mut self,
        complex: &Map<String, Value>,
        enclosing_namespace: NamespaceRef,
    )

Source from the content-addressed store, hash-verified

750 }?;
751 let size = usize::try_from(size).map_err(|e| Details::ConvertU64ToUsize(e, size))?;
752 let fully_qualified_name = Name::parse(&mut complex, enclosing_namespace)?;
753 let aliases =
754 self.fix_aliases_namespace(complex.aliases()?, fully_qualified_name.namespace())?;
755
756 let schema = Schema::Fixed(FixedSchema {
757 name: fully_qualified_name.clone(),
758 aliases: aliases.clone(),
759 doc,
760 size,
761 attributes: self.get_custom_attributes(complex),
762 });
763
764 self.register_parsed_schema(&fully_qualified_name, &schema, &aliases);
765
766 Ok(schema)
767 }
768
769 // A type alias may be specified either as a fully namespace-qualified, or relative
770 // to the namespace of the name it is an alias for. For example, if a type named "a.b"
771 // has aliases of "c" and "x.y", then the fully qualified names of its aliases are "a.c"
772 // and "x.y".
773 // https://avro.apache.org/docs/++version++/specification/#aliases
774 fn fix_aliases_namespace(
775 &self,
776 aliases: Option<Vec<String>>,
777 namespace: NamespaceRef,
778 ) -> AvroResult<Aliases> {
779 aliases
780 .map(|aliases| {
781 aliases
782 .into_iter()
783 .map(|alias| {
784 // An alias that is not a valid Avro name is a schema
785 // error — propagate it instead of unwrapping (which
786 // would panic on attacker-controlled schema JSON).
787 Alias::new_with_enclosing_namespace(alias, namespace)
788 })
789 .collect::<AvroResult<Vec<_>>>()
790 })
791 .transpose()
792 }
793
794 fn get_schema_type_name(&self, name: Name, value: &Value) -> AvroResult<Name> {

Callers 2

parse_complexMethod · 0.80

Calls 8

getMethod · 0.80
fix_aliases_namespaceMethod · 0.80
get_custom_attributesMethod · 0.80
cloneMethod · 0.45
aliasesMethod · 0.45
namespaceMethod · 0.45

Tested by

no test coverage detected