@@ -4021,11 +4021,32 @@ fn regular_serialize_vec<T: Serialize>(items: &[T], serializer: &mut Serializer<
4021
4021
}
4022
4022
}
4023
4023
4024
+ impl < T : WithSchema > WithSchema for Box < [ T ] > {
4025
+ fn schema ( version : u32 ) -> Schema {
4026
+ Schema :: Vector ( Box :: new ( T :: schema ( version) ) )
4027
+ }
4028
+ }
4024
4029
impl < T : WithSchema > WithSchema for Arc < [ T ] > {
4025
4030
fn schema ( version : u32 ) -> Schema {
4026
4031
Schema :: Vector ( Box :: new ( T :: schema ( version) ) )
4027
4032
}
4028
4033
}
4034
+ impl < T : Introspect > Introspect for Box < [ T ] > {
4035
+ fn introspect_value ( & self ) -> String {
4036
+ return "Box[]" . to_string ( ) ;
4037
+ }
4038
+
4039
+ fn introspect_child ( & self , index : usize ) -> Option < Box < dyn IntrospectItem + ' _ > > {
4040
+ if index >= self . len ( ) {
4041
+ return None ;
4042
+ }
4043
+ return Some ( introspect_item ( index. to_string ( ) , & self [ index] ) ) ;
4044
+ }
4045
+ fn introspect_len ( & self ) -> usize {
4046
+ self . len ( )
4047
+ }
4048
+ }
4049
+
4029
4050
impl < T : Introspect > Introspect for Arc < [ T ] > {
4030
4051
fn introspect_value ( & self ) -> String {
4031
4052
return "Arc[]" . to_string ( ) ;
@@ -4082,6 +4103,25 @@ impl Deserialize for Arc<str> {
4082
4103
}
4083
4104
}
4084
4105
4106
+ impl < T : Serialize + ReprC > Serialize for Box < [ T ] > {
4107
+ fn serialize ( & self , serializer : & mut Serializer < impl Write > ) -> Result < ( ) , SavefileError > {
4108
+ unsafe {
4109
+ if T :: repr_c_optimization_safe ( serializer. version ) . is_false ( ) {
4110
+ regular_serialize_vec ( & * self , serializer)
4111
+ } else {
4112
+ let l = self . len ( ) ;
4113
+ serializer. write_usize ( l) ?;
4114
+ serializer. write_buf ( std:: slice:: from_raw_parts (
4115
+ ( * self ) . as_ptr ( ) as * const u8 ,
4116
+ std:: mem:: size_of :: < T > ( ) * l,
4117
+ ) )
4118
+ }
4119
+ }
4120
+ }
4121
+ }
4122
+ impl < T : ReprC > ReprC for Box < [ T ] > { }
4123
+
4124
+
4085
4125
impl < T : Serialize + ReprC > Serialize for Arc < [ T ] > {
4086
4126
fn serialize ( & self , serializer : & mut Serializer < impl Write > ) -> Result < ( ) , SavefileError > {
4087
4127
unsafe {
@@ -4105,6 +4145,11 @@ impl<T: Deserialize+ReprC> Deserialize for Arc<[T]> {
4105
4145
Ok ( Vec :: < T > :: deserialize ( deserializer) ?. into ( ) )
4106
4146
}
4107
4147
}
4148
+ impl < T : Deserialize +ReprC > Deserialize for Box < [ T ] > {
4149
+ fn deserialize ( deserializer : & mut Deserializer < impl Read > ) -> Result < Self , SavefileError > {
4150
+ Ok ( Vec :: < T > :: deserialize ( deserializer) ?. into_boxed_slice ( ) )
4151
+ }
4152
+ }
4108
4153
4109
4154
impl < T > ReprC for Vec < T > { }
4110
4155
0 commit comments