MCPcopy Create free account
hub / github.com/apache/fory / get_source_fields

Function get_source_fields

rust/fory-derive/src/util.rs:82–124  ·  view source on GitHub ↗

Returns source fields with their original indices and field names preserved.

(fields: &[&'a Field])

Source from the content-addressed store, hash-verified

80
81/// Returns source fields with their original indices and field names preserved.
82pub fn get_source_fields<'a>(fields: &[&'a Field]) -> Vec<SourceField<'a>> {
83 use crate::object::util::get_sorted_field_names;
84
85 let is_tuple = !fields.is_empty() && fields[0].ident.is_none();
86 let sorted_names = get_sorted_field_names(fields);
87 let mut result = Vec::with_capacity(fields.len());
88
89 for name in &sorted_names {
90 if is_tuple {
91 // For tuple structs, field name is the original index as string
92 if let Ok(idx) = name.parse::<usize>() {
93 if idx < fields.len() {
94 result.push(SourceField {
95 original_index: idx,
96 field: fields[idx],
97 field_name: name.clone(),
98 is_tuple_struct: true,
99 });
100 }
101 }
102 } else {
103 // For named structs, match by field identifier
104 for (idx, field) in fields.iter().enumerate() {
105 if field
106 .ident
107 .as_ref()
108 .map(|ident| ident == name)
109 .unwrap_or(false)
110 {
111 result.push(SourceField {
112 original_index: idx,
113 field,
114 field_name: name.clone(),
115 is_tuple_struct: false,
116 });
117 break;
118 }
119 }
120 }
121 }
122
123 result
124}
125
126/// Extract just the fields from source fields.
127pub fn extract_fields<'a>(source_fields: &[SourceField<'a>]) -> Vec<&'a Field> {

Callers 1

source_fieldsFunction · 0.85

Calls 6

get_sorted_field_namesFunction · 0.85
is_emptyMethod · 0.80
lenMethod · 0.80
is_noneMethod · 0.45
cloneMethod · 0.45
mapMethod · 0.45

Tested by

no test coverage detected