| 744 | } |
| 745 | |
| 746 | fn encode<W: Write + ?Sized>(&mut self, out: &mut W, idx: usize) -> Result<(), AvroError> { |
| 747 | match &self.null_state { |
| 748 | NullState::NonNullable => {} |
| 749 | NullState::NullableNoNulls { union_value_byte } => out |
| 750 | .write_all(&[*union_value_byte]) |
| 751 | .map_err(|e| AvroError::IoError(format!("write union value branch: {e}"), e))?, |
| 752 | NullState::Nullable { nulls, null_order } if nulls.is_null(idx) => { |
| 753 | return write_optional_index(out, true, *null_order); // no value to write |
| 754 | } |
| 755 | NullState::Nullable { null_order, .. } => { |
| 756 | write_optional_index(out, false, *null_order)?; |
| 757 | } |
| 758 | } |
| 759 | self.encoder.encode(out, idx) |
| 760 | } |
| 761 | } |
| 762 | |
| 763 | fn union_value_branch_byte(null_order: Nullability, is_null: bool) -> u8 { |