s2json_core/geometry/
impls.rs

1use crate::*;
2
3// We have to manually implement the Deserialize trait to fix a compilation error
4#[doc(hidden)]
5#[allow(unused_extern_crates, clippy::useless_attribute)]
6extern crate serde as _serde;
7#[automatically_derived]
8// #[coverage(off)]
9impl<'de, M: Clone + Default> _serde::Deserialize<'de> for Geometry<M>
10where
11    M: _serde::Deserialize<'de>,
12{
13    fn deserialize<__D>(__deserializer: __D) -> _serde::__private::Result<Self, __D::Error>
14    where
15        __D: _serde::Deserializer<'de>,
16    {
17        let __content =
18            <_serde::__private::de::Content as _serde::Deserialize>::deserialize(__deserializer)?;
19        let __deserializer =
20            _serde::__private::de::ContentRefDeserializer::<__D::Error>::new(&__content);
21        if let _serde::__private::Ok(__ok) = _serde::__private::Result::map(
22            <PointGeometry<M> as _serde::Deserialize>::deserialize(__deserializer),
23            Geometry::Point,
24        ) {
25            return _serde::__private::Ok(__ok);
26        }
27        // Attempt to deserialize as MultiPoint then check for LineString
28        if let _serde::__private::Ok(__ok) = _serde::__private::Result::map(
29            <MultiPointGeometry<M> as _serde::Deserialize>::deserialize(__deserializer),
30            Geometry::MultiPoint,
31        ) {
32            // pull out the MultiPoint variant
33            if let Geometry::MultiPoint(multipoint) = &__ok {
34                if multipoint._type == GeometryType::LineString {
35                    // If deserialization succeeds as MultiPoint, check if content is LineString
36                    if let _serde::__private::Ok(__ok2) = _serde::__private::Result::map(
37                        <LineStringGeometry<M> as _serde::Deserialize>::deserialize(__deserializer),
38                        Geometry::LineString,
39                    ) {
40                        // If LineString is found, return LineString variant
41                        return _serde::__private::Ok(__ok2);
42                    }
43                }
44            }
45            return _serde::__private::Ok(__ok);
46        }
47        if let _serde::__private::Ok(__ok) = _serde::__private::Result::map(
48            <MultiLineStringGeometry<M> as _serde::Deserialize>::deserialize(__deserializer),
49            Geometry::MultiLineString,
50        ) {
51            // pull out the MultiLineString variant
52            if let Geometry::MultiLineString(multilinestring) = &__ok {
53                if multilinestring._type == GeometryType::Polygon {
54                    if let _serde::__private::Ok(__ok2) = _serde::__private::Result::map(
55                        <PolygonGeometry<M> as _serde::Deserialize>::deserialize(__deserializer),
56                        Geometry::Polygon,
57                    ) {
58                        return _serde::__private::Ok(__ok2);
59                    }
60                }
61            }
62            return _serde::__private::Ok(__ok);
63        }
64        if let _serde::__private::Ok(__ok) = _serde::__private::Result::map(
65            <MultiPolygonGeometry<M> as _serde::Deserialize>::deserialize(__deserializer),
66            Geometry::MultiPolygon,
67        ) {
68            return _serde::__private::Ok(__ok);
69        }
70        if let _serde::__private::Ok(__ok) = _serde::__private::Result::map(
71            <Point3DGeometry<M> as _serde::Deserialize>::deserialize(__deserializer),
72            Geometry::Point3D,
73        ) {
74            return _serde::__private::Ok(__ok);
75        }
76        if let _serde::__private::Ok(__ok) = _serde::__private::Result::map(
77            <MultiPoint3DGeometry<M> as _serde::Deserialize>::deserialize(__deserializer),
78            Geometry::MultiPoint3D,
79        ) {
80            // pull out the MultiPoint3D variant
81            if let Geometry::MultiPoint3D(multipoint3d) = &__ok {
82                if multipoint3d._type == GeometryType::LineString3D {
83                    if let _serde::__private::Ok(__ok2) = _serde::__private::Result::map(
84                        <LineString3DGeometry<M> as _serde::Deserialize>::deserialize(
85                            __deserializer,
86                        ),
87                        Geometry::LineString3D,
88                    ) {
89                        return _serde::__private::Ok(__ok2);
90                    }
91                }
92            }
93            return _serde::__private::Ok(__ok);
94        }
95        if let _serde::__private::Ok(__ok) = _serde::__private::Result::map(
96            <MultiLineString3DGeometry<M> as _serde::Deserialize>::deserialize(__deserializer),
97            Geometry::MultiLineString3D,
98        ) {
99            // pull out the MultiLineString3D variant
100            if let Geometry::MultiLineString3D(multilinestring3d) = &__ok {
101                if multilinestring3d._type == GeometryType::Polygon3D {
102                    if let _serde::__private::Ok(__ok2) = _serde::__private::Result::map(
103                        <Polygon3DGeometry<M> as _serde::Deserialize>::deserialize(__deserializer),
104                        Geometry::Polygon3D,
105                    ) {
106                        return _serde::__private::Ok(__ok2);
107                    }
108                }
109            }
110            return _serde::__private::Ok(__ok);
111        }
112        if let _serde::__private::Ok(__ok) = _serde::__private::Result::map(
113            <MultiPolygon3DGeometry<M> as _serde::Deserialize>::deserialize(__deserializer),
114            Geometry::MultiPolygon3D,
115        ) {
116            return _serde::__private::Ok(__ok);
117        }
118        _serde::__private::Err(_serde::de::Error::custom(
119            "data did not match any variant of untagged enum Geometry",
120        ))
121    }
122}
123
124#[doc(hidden)]
125#[allow(unused_extern_crates, clippy::useless_attribute)]
126#[automatically_derived]
127// #[coverage(off)]
128impl<'de, M: Clone + Default> _serde::Deserialize<'de> for VectorGeometry<M>
129where
130    M: _serde::Deserialize<'de>,
131{
132    fn deserialize<__D>(__deserializer: __D) -> _serde::__private::Result<Self, __D::Error>
133    where
134        __D: _serde::Deserializer<'de>,
135    {
136        let __content =
137            <_serde::__private::de::Content as _serde::Deserialize>::deserialize(__deserializer)?;
138        let __deserializer =
139            _serde::__private::de::ContentRefDeserializer::<__D::Error>::new(&__content);
140        if let _serde::__private::Ok(__ok) = _serde::__private::Result::map(
141            <VectorPointGeometry<M> as _serde::Deserialize>::deserialize(__deserializer),
142            VectorGeometry::Point,
143        ) {
144            return _serde::__private::Ok(__ok);
145        }
146        // Attempt to deserialize as MultiPoint, then check for LineString
147        if let _serde::__private::Ok(__ok) = _serde::__private::Result::map(
148            <VectorMultiPointGeometry<M> as _serde::Deserialize>::deserialize(__deserializer),
149            VectorGeometry::MultiPoint,
150        ) {
151            // pull out the MultiPoint variant
152            if let VectorGeometry::MultiPoint(multipoint) = &__ok {
153                if multipoint._type == VectorGeometryType::LineString {
154                    // If deserialization succeeds as MultiPoint, check if content is LineString
155                    if let _serde::__private::Ok(__ok2) = _serde::__private::Result::map(
156                        <VectorLineStringGeometry<M> as _serde::Deserialize>::deserialize(
157                            __deserializer,
158                        ),
159                        VectorGeometry::LineString,
160                    ) {
161                        // If LineString is found, return LineString variant
162                        return _serde::__private::Ok(__ok2);
163                    }
164                }
165            }
166            return _serde::__private::Ok(__ok);
167        }
168        // Attempt to deserialize as MultiLineString, then check for Polygon
169        if let _serde::__private::Ok(__ok) = _serde::__private::Result::map(
170            <VectorMultiLineStringGeometry<M> as _serde::Deserialize>::deserialize(__deserializer),
171            VectorGeometry::MultiLineString,
172        ) {
173            // pull out the MultiLineString variant
174            if let VectorGeometry::MultiLineString(multilinestring) = &__ok {
175                if multilinestring._type == VectorGeometryType::Polygon {
176                    // If deserialization succeeds as MultiLineString, check if content is Polygon
177                    if let _serde::__private::Ok(__ok2) = _serde::__private::Result::map(
178                        <VectorPolygonGeometry<M> as _serde::Deserialize>::deserialize(
179                            __deserializer,
180                        ),
181                        VectorGeometry::Polygon,
182                    ) {
183                        // If Polygon is found, return Polygon variant
184                        return _serde::__private::Ok(__ok2);
185                    }
186                }
187            }
188            return _serde::__private::Ok(__ok);
189        }
190        if let _serde::__private::Ok(__ok) = _serde::__private::Result::map(
191            <VectorMultiPolygonGeometry<M> as _serde::Deserialize>::deserialize(__deserializer),
192            VectorGeometry::MultiPolygon,
193        ) {
194            return _serde::__private::Ok(__ok);
195        }
196        _serde::__private::Err(_serde::de::Error::custom(
197            "data did not match any variant of untagged enum VectorGeometry",
198        ))
199    }
200}