@@ -10,9 +10,6 @@ use serde_json::{Map, Value};
1010use std:: { collections:: HashMap , path:: Path } ;
1111use url:: Url ;
1212
13- /// The type field for [Items](Item).
14- pub const ITEM_TYPE : & str = "Feature" ;
15-
1613const TOP_LEVEL_ATTRIBUTES : [ & str ; 8 ] = [
1714 "type" ,
1815 "stac_extensions" ,
@@ -32,14 +29,8 @@ const TOP_LEVEL_ATTRIBUTES: [&str; 8] = [
3229/// enables any client to search or crawl online catalogs of spatial 'assets'
3330/// (e.g., satellite imagery, derived data, DEMs).
3431#[ derive( Debug , Serialize , Deserialize , PartialEq , Clone ) ]
32+ #[ serde( tag = "type" , rename = "Feature" ) ]
3533pub struct Item {
36- /// Type of the GeoJSON Object. MUST be set to `"Feature"`.
37- #[ serde(
38- deserialize_with = "deserialize_type" ,
39- serialize_with = "serialize_type"
40- ) ]
41- r#type : String ,
42-
4334 /// The STAC version the `Item` implements.
4435 #[ serde( rename = "stac_version" ) ]
4536 pub version : Version ,
@@ -107,10 +98,8 @@ pub struct Item {
10798/// [stac-geoparquet](https://github.com/stac-utils/stac-geoparquet/blob/main/spec/stac-geoparquet-spec.md),
10899/// use this "flat" representation.
109100#[ derive( Debug , Serialize , Deserialize ) ]
101+ #[ serde( tag = "type" , rename = "Feature" ) ]
110102pub struct FlatItem {
111- #[ serde( default = "default_type" ) ]
112- r#type : String ,
113-
114103 #[ serde( rename = "stac_version" , default = "default_stac_version" ) ]
115104 version : Version ,
116105
@@ -334,7 +323,6 @@ impl Item {
334323 /// ```
335324 pub fn new ( id : impl ToString ) -> Item {
336325 Item {
337- r#type : ITEM_TYPE . to_string ( ) ,
338326 version : STAC_VERSION ,
339327 extensions : Vec :: new ( ) ,
340328 id : id. to_string ( ) ,
@@ -560,7 +548,6 @@ impl Item {
560548 }
561549 }
562550 Ok ( FlatItem {
563- r#type : ITEM_TYPE . to_string ( ) ,
564551 version : STAC_VERSION ,
565552 extensions : self . extensions ,
566553 id : self . id ,
@@ -677,36 +664,17 @@ impl TryFrom<Item> for Feature {
677664 }
678665}
679666
680- fn deserialize_type < ' de , D > ( deserializer : D ) -> std:: result:: Result < String , D :: Error >
681- where
682- D : serde:: de:: Deserializer < ' de > ,
683- {
684- crate :: deserialize_type ( deserializer, ITEM_TYPE )
685- }
686-
687- fn serialize_type < S > ( r#type : & String , serializer : S ) -> std:: result:: Result < S :: Ok , S :: Error >
688- where
689- S : serde:: ser:: Serializer ,
690- {
691- crate :: serialize_type ( r#type, serializer, ITEM_TYPE )
692- }
693-
694667fn default_stac_version ( ) -> Version {
695668 STAC_VERSION
696669}
697670
698- fn default_type ( ) -> String {
699- ITEM_TYPE . to_string ( )
700- }
701-
702671impl Migrate for Item { }
703672
704673#[ cfg( test) ]
705674mod tests {
706675 use super :: { Builder , FlatItem , Item } ;
707676 use crate :: { Asset , STAC_VERSION } ;
708677 use geojson:: { feature:: Id , Feature } ;
709- use serde_json:: Value ;
710678
711679 #[ test]
712680 fn new ( ) {
@@ -715,7 +683,6 @@ mod tests {
715683 assert ! ( item. properties. datetime. is_some( ) ) ;
716684 assert ! ( item. assets. is_empty( ) ) ;
717685 assert ! ( item. collection. is_none( ) ) ;
718- assert_eq ! ( item. r#type, "Feature" ) ;
719686 assert_eq ! ( item. version, STAC_VERSION ) ;
720687 assert ! ( item. extensions. is_empty( ) ) ;
721688 assert_eq ! ( item. id, "an-id" ) ;
@@ -731,22 +698,6 @@ mod tests {
731698 assert ! ( value. get( "collection" ) . is_none( ) ) ;
732699 }
733700
734- #[ test]
735- fn deserialize_invalid_type_field ( ) {
736- let mut item: Value =
737- serde_json:: to_value ( crate :: read :: < Item > ( "examples/simple-item.json" ) . unwrap ( ) )
738- . unwrap ( ) ;
739- item[ "type" ] = "Item" . into ( ) ; // must be "Feature"
740- assert ! ( serde_json:: from_value:: <Item >( item) . is_err( ) ) ;
741- }
742-
743- #[ test]
744- fn serialize_invalid_type_field ( ) {
745- let mut item = Item :: new ( "an-id" ) ;
746- item. r#type = "Item" . to_string ( ) ; // must be "Feature"
747- assert ! ( serde_json:: to_value( item) . is_err( ) ) ;
748- }
749-
750701 #[ test]
751702 #[ cfg( feature = "geo" ) ]
752703 fn set_geometry_sets_bbox ( ) {
0 commit comments