Skip to main content

db_dump/
versions.rs

1//! <b style="font-variant:small-caps">versions.csv</b>
2
3use crate::crates::CrateId;
4use crate::ignore::IgnoredStr;
5use crate::users::UserId;
6use chrono::{DateTime, Utc};
7use semver::{BuildMetadata, Op, Version, VersionReq};
8use serde::de::{Deserialize, Deserializer, Unexpected, Visitor};
9use serde_derive::{Deserialize, Serialize};
10use std::borrow::Borrow;
11use std::cmp::Ordering;
12use std::collections::BTreeMap as Map;
13use std::fmt;
14use std::hash::{Hash, Hasher};
15use std::str::FromStr;
16
17/// Primary key of **versions.csv**.
18#[derive(#[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for VersionId {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private228::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                _serde::Serialize::serialize(&self.0, __serializer)
            }
        }
    };Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl<'de> _serde::Deserialize<'de> for VersionId {
            fn deserialize<__D>(__deserializer: __D)
                -> _serde::__private228::Result<Self, __D::Error> where
                __D: _serde::Deserializer<'de> {
                _serde::__private228::Result::map(_serde::Deserialize::deserialize(__deserializer),
                    |__transparent| VersionId { 0: __transparent })
            }
        }
    };Deserialize, #[automatically_derived]
impl ::core::marker::Copy for VersionId { }Copy, #[automatically_derived]
impl ::core::clone::Clone for VersionId {
    #[inline]
    fn clone(&self) -> VersionId {
        let _: ::core::clone::AssertParamIsClone<u32>;
        *self
    }
}Clone, #[automatically_derived]
impl ::core::cmp::Ord for VersionId {
    #[inline]
    fn cmp(&self, other: &VersionId) -> ::core::cmp::Ordering {
        ::core::cmp::Ord::cmp(&self.0, &other.0)
    }
}Ord, #[automatically_derived]
impl ::core::cmp::PartialOrd for VersionId {
    #[inline]
    fn partial_cmp(&self, other: &VersionId)
        -> ::core::option::Option<::core::cmp::Ordering> {
        ::core::option::Option::Some(::core::cmp::Ord::cmp(self, other))
    }
}PartialOrd, #[automatically_derived]
impl ::core::cmp::Eq for VersionId {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<u32>;
    }
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for VersionId {
    #[inline]
    fn eq(&self, other: &VersionId) -> bool { self.0 == other.0 }
}PartialEq, #[automatically_derived]
impl ::core::hash::Hash for VersionId {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        ::core::hash::Hash::hash(&self.0, state)
    }
}Hash, #[automatically_derived]
impl ::core::fmt::Debug for VersionId {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_tuple_field1_finish(f, "VersionId",
            &&self.0)
    }
}Debug)]
19#[serde(transparent)]
20#[cfg_attr(not(doc), repr(transparent))]
21pub struct VersionId(pub u32);
22
23/// One row of **versions.csv**.
24#[derive(#[automatically_derived]
impl ::core::clone::Clone for Row {
    #[inline]
    fn clone(&self) -> Row {
        Row {
            id: ::core::clone::Clone::clone(&self.id),
            crate_id: ::core::clone::Clone::clone(&self.crate_id),
            num: ::core::clone::Clone::clone(&self.num),
            updated_at: ::core::clone::Clone::clone(&self.updated_at),
            created_at: ::core::clone::Clone::clone(&self.created_at),
            downloads: ::core::clone::Clone::clone(&self.downloads),
            features: ::core::clone::Clone::clone(&self.features),
            yanked: ::core::clone::Clone::clone(&self.yanked),
            license: ::core::clone::Clone::clone(&self.license),
            crate_size: ::core::clone::Clone::clone(&self.crate_size),
            published_by: ::core::clone::Clone::clone(&self.published_by),
            tar_sha256: ::core::clone::Clone::clone(&self.tar_sha256),
            links: ::core::clone::Clone::clone(&self.links),
            rust_version: ::core::clone::Clone::clone(&self.rust_version),
            has_lib: ::core::clone::Clone::clone(&self.has_lib),
            bin_names: ::core::clone::Clone::clone(&self.bin_names),
            edition: ::core::clone::Clone::clone(&self.edition),
            description: ::core::clone::Clone::clone(&self.description),
            homepage: ::core::clone::Clone::clone(&self.homepage),
            documentation: ::core::clone::Clone::clone(&self.documentation),
            repository: ::core::clone::Clone::clone(&self.repository),
            categories: ::core::clone::Clone::clone(&self.categories),
            keywords: ::core::clone::Clone::clone(&self.keywords),
            zip_sha256: ::core::clone::Clone::clone(&self.zip_sha256),
            zip_json_sha256: ::core::clone::Clone::clone(&self.zip_json_sha256),
        }
    }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for Row {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        let names: &'static _ =
            &["id", "crate_id", "num", "updated_at", "created_at",
                        "downloads", "features", "yanked", "license", "crate_size",
                        "published_by", "tar_sha256", "links", "rust_version",
                        "has_lib", "bin_names", "edition", "description",
                        "homepage", "documentation", "repository", "categories",
                        "keywords", "zip_sha256", "zip_json_sha256"];
        let values: &[&dyn ::core::fmt::Debug] =
            &[&self.id, &self.crate_id, &self.num, &self.updated_at,
                        &self.created_at, &self.downloads, &self.features,
                        &self.yanked, &self.license, &self.crate_size,
                        &self.published_by, &self.tar_sha256, &self.links,
                        &self.rust_version, &self.has_lib, &self.bin_names,
                        &self.edition, &self.description, &self.homepage,
                        &self.documentation, &self.repository, &self.categories,
                        &self.keywords, &self.zip_sha256, &&self.zip_json_sha256];
        ::core::fmt::Formatter::debug_struct_fields_finish(f, "Row", names,
            values)
    }
}Debug)]
25#[non_exhaustive]
26pub struct Row {
27    /// PRIMARY KEY
28    pub id: VersionId,
29    pub crate_id: CrateId,
30    pub num: Version,
31    pub updated_at: DateTime<Utc>,
32    pub created_at: DateTime<Utc>,
33    pub downloads: u64,
34    pub features: Map<String, Vec<String>>,
35    pub yanked: bool,
36    pub license: String,
37    pub crate_size: Option<u64>,
38    pub published_by: Option<UserId>,
39    pub tar_sha256: [u8; 32],
40    pub links: Option<String>,
41    pub rust_version: Option<Version>,
42    pub has_lib: bool,
43    pub bin_names: Vec<String>,
44    pub edition: Option<u16>,
45    pub description: Option<String>,
46    pub homepage: Option<String>,
47    pub documentation: Option<String>,
48    pub repository: Option<String>,
49    pub categories: Vec<String>,
50    pub keywords: Vec<String>,
51    pub zip_sha256: [u8; 32],
52    pub zip_json_sha256: [u8; 32],
53}
54
55impl<'de> Deserialize<'de> for Row {
56    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
57    where
58        D: Deserializer<'de>,
59    {
60        #[derive(#[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl<'de> _serde::Deserialize<'de> for Row {
            fn deserialize<__D>(__deserializer: __D)
                -> _serde::__private228::Result<Self, __D::Error> where
                __D: _serde::Deserializer<'de> {
                #[allow(non_camel_case_types)]
                #[doc(hidden)]
                enum __Field {
                    __field0,
                    __field1,
                    __field2,
                    __field3,
                    __field4,
                    __field5,
                    __field6,
                    __field7,
                    __field8,
                    __field9,
                    __field10,
                    __field11,
                    __field12,
                    __field13,
                    __field14,
                    __field15,
                    __field16,
                    __field17,
                    __field18,
                    __field19,
                    __field20,
                    __field21,
                    __field22,
                    __field23,
                    __field24,
                    __field25,
                }
                #[doc(hidden)]
                struct __FieldVisitor;
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
                    type Value = __Field;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "field identifier")
                    }
                    fn visit_u64<__E>(self, __value: u64)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            0u64 => _serde::__private228::Ok(__Field::__field0),
                            1u64 => _serde::__private228::Ok(__Field::__field1),
                            2u64 => _serde::__private228::Ok(__Field::__field2),
                            3u64 => _serde::__private228::Ok(__Field::__field3),
                            4u64 => _serde::__private228::Ok(__Field::__field4),
                            5u64 => _serde::__private228::Ok(__Field::__field5),
                            6u64 => _serde::__private228::Ok(__Field::__field6),
                            7u64 => _serde::__private228::Ok(__Field::__field7),
                            8u64 => _serde::__private228::Ok(__Field::__field8),
                            9u64 => _serde::__private228::Ok(__Field::__field9),
                            10u64 => _serde::__private228::Ok(__Field::__field10),
                            11u64 => _serde::__private228::Ok(__Field::__field11),
                            12u64 => _serde::__private228::Ok(__Field::__field12),
                            13u64 => _serde::__private228::Ok(__Field::__field13),
                            14u64 => _serde::__private228::Ok(__Field::__field14),
                            15u64 => _serde::__private228::Ok(__Field::__field15),
                            16u64 => _serde::__private228::Ok(__Field::__field16),
                            17u64 => _serde::__private228::Ok(__Field::__field17),
                            18u64 => _serde::__private228::Ok(__Field::__field18),
                            19u64 => _serde::__private228::Ok(__Field::__field19),
                            20u64 => _serde::__private228::Ok(__Field::__field20),
                            21u64 => _serde::__private228::Ok(__Field::__field21),
                            22u64 => _serde::__private228::Ok(__Field::__field22),
                            23u64 => _serde::__private228::Ok(__Field::__field23),
                            24u64 => _serde::__private228::Ok(__Field::__field24),
                            25u64 => _serde::__private228::Ok(__Field::__field25),
                            _ =>
                                _serde::__private228::Err(_serde::de::Error::invalid_value(_serde::de::Unexpected::Unsigned(__value),
                                        &"field index 0 <= i < 26")),
                        }
                    }
                    fn visit_str<__E>(self, __value: &str)
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            "id" => _serde::__private228::Ok(__Field::__field0),
                            "crate_id" => _serde::__private228::Ok(__Field::__field1),
                            "num" => _serde::__private228::Ok(__Field::__field2),
                            "num_no_build" =>
                                _serde::__private228::Ok(__Field::__field3),
                            "updated_at" => _serde::__private228::Ok(__Field::__field4),
                            "created_at" => _serde::__private228::Ok(__Field::__field5),
                            "downloads" => _serde::__private228::Ok(__Field::__field6),
                            "features" => _serde::__private228::Ok(__Field::__field7),
                            "yanked" => _serde::__private228::Ok(__Field::__field8),
                            "license" => _serde::__private228::Ok(__Field::__field9),
                            "crate_size" =>
                                _serde::__private228::Ok(__Field::__field10),
                            "published_by" =>
                                _serde::__private228::Ok(__Field::__field11),
                            "tar_sha256" =>
                                _serde::__private228::Ok(__Field::__field12),
                            "links" => _serde::__private228::Ok(__Field::__field13),
                            "rust_version" =>
                                _serde::__private228::Ok(__Field::__field14),
                            "has_lib" => _serde::__private228::Ok(__Field::__field15),
                            "bin_names" => _serde::__private228::Ok(__Field::__field16),
                            "edition" => _serde::__private228::Ok(__Field::__field17),
                            "description" =>
                                _serde::__private228::Ok(__Field::__field18),
                            "homepage" => _serde::__private228::Ok(__Field::__field19),
                            "documentation" =>
                                _serde::__private228::Ok(__Field::__field20),
                            "repository" =>
                                _serde::__private228::Ok(__Field::__field21),
                            "categories" =>
                                _serde::__private228::Ok(__Field::__field22),
                            "keywords" => _serde::__private228::Ok(__Field::__field23),
                            "zip_sha256" =>
                                _serde::__private228::Ok(__Field::__field24),
                            "zip_json_sha256" =>
                                _serde::__private228::Ok(__Field::__field25),
                            _ => {
                                _serde::__private228::Err(_serde::de::Error::unknown_field(__value,
                                        FIELDS))
                            }
                        }
                    }
                    fn visit_bytes<__E>(self, __value: &[u8])
                        -> _serde::__private228::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            b"id" => _serde::__private228::Ok(__Field::__field0),
                            b"crate_id" => _serde::__private228::Ok(__Field::__field1),
                            b"num" => _serde::__private228::Ok(__Field::__field2),
                            b"num_no_build" =>
                                _serde::__private228::Ok(__Field::__field3),
                            b"updated_at" =>
                                _serde::__private228::Ok(__Field::__field4),
                            b"created_at" =>
                                _serde::__private228::Ok(__Field::__field5),
                            b"downloads" => _serde::__private228::Ok(__Field::__field6),
                            b"features" => _serde::__private228::Ok(__Field::__field7),
                            b"yanked" => _serde::__private228::Ok(__Field::__field8),
                            b"license" => _serde::__private228::Ok(__Field::__field9),
                            b"crate_size" =>
                                _serde::__private228::Ok(__Field::__field10),
                            b"published_by" =>
                                _serde::__private228::Ok(__Field::__field11),
                            b"tar_sha256" =>
                                _serde::__private228::Ok(__Field::__field12),
                            b"links" => _serde::__private228::Ok(__Field::__field13),
                            b"rust_version" =>
                                _serde::__private228::Ok(__Field::__field14),
                            b"has_lib" => _serde::__private228::Ok(__Field::__field15),
                            b"bin_names" =>
                                _serde::__private228::Ok(__Field::__field16),
                            b"edition" => _serde::__private228::Ok(__Field::__field17),
                            b"description" =>
                                _serde::__private228::Ok(__Field::__field18),
                            b"homepage" => _serde::__private228::Ok(__Field::__field19),
                            b"documentation" =>
                                _serde::__private228::Ok(__Field::__field20),
                            b"repository" =>
                                _serde::__private228::Ok(__Field::__field21),
                            b"categories" =>
                                _serde::__private228::Ok(__Field::__field22),
                            b"keywords" => _serde::__private228::Ok(__Field::__field23),
                            b"zip_sha256" =>
                                _serde::__private228::Ok(__Field::__field24),
                            b"zip_json_sha256" =>
                                _serde::__private228::Ok(__Field::__field25),
                            _ => {
                                let __value =
                                    &_serde::__private228::from_utf8_lossy(__value);
                                _serde::__private228::Err(_serde::de::Error::unknown_field(__value,
                                        FIELDS))
                            }
                        }
                    }
                }
                #[automatically_derived]
                impl<'de> _serde::Deserialize<'de> for __Field {
                    #[inline]
                    fn deserialize<__D>(__deserializer: __D)
                        -> _serde::__private228::Result<Self, __D::Error> where
                        __D: _serde::Deserializer<'de> {
                        _serde::Deserializer::deserialize_identifier(__deserializer,
                            __FieldVisitor)
                    }
                }
                #[doc(hidden)]
                struct __Visitor<'de> {
                    marker: _serde::__private228::PhantomData<Row>,
                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = Row;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private228::Formatter)
                        -> _serde::__private228::fmt::Result {
                        _serde::__private228::Formatter::write_str(__formatter,
                            "struct Row")
                    }
                    #[inline]
                    fn visit_seq<__A>(self, mut __seq: __A)
                        -> _serde::__private228::Result<Self::Value, __A::Error>
                        where __A: _serde::de::SeqAccess<'de> {
                        let __field0 =
                            match _serde::de::SeqAccess::next_element::<VersionId>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
                                                &"struct Row with 26 elements")),
                            };
                        let __field1 =
                            match _serde::de::SeqAccess::next_element::<CrateId>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
                                                &"struct Row with 26 elements")),
                            };
                        let __field2 =
                            match {
                                    #[doc(hidden)]
                                    struct __DeserializeWith<'de> {
                                        value: Version,
                                        phantom: _serde::__private228::PhantomData<Row>,
                                        lifetime: _serde::__private228::PhantomData<&'de ()>,
                                    }
                                    #[automatically_derived]
                                    impl<'de> _serde::Deserialize<'de> for
                                        __DeserializeWith<'de> {
                                        fn deserialize<__D>(__deserializer: __D)
                                            -> _serde::__private228::Result<Self, __D::Error> where
                                            __D: _serde::Deserializer<'de> {
                                            _serde::__private228::Ok(__DeserializeWith {
                                                    value: version(__deserializer)?,
                                                    phantom: _serde::__private228::PhantomData,
                                                    lifetime: _serde::__private228::PhantomData,
                                                })
                                        }
                                    }
                                    _serde::__private228::Option::map(_serde::de::SeqAccess::next_element::<__DeserializeWith<'de>>(&mut __seq)?,
                                        |__wrap| __wrap.value)
                                } {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
                                                &"struct Row with 26 elements")),
                            };
                        let __field3 =
                            match _serde::de::SeqAccess::next_element::<IgnoredStr>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    _serde::__private228::Default::default(),
                            };
                        let __field4 =
                            match {
                                    #[doc(hidden)]
                                    struct __DeserializeWith<'de> {
                                        value: DateTime<Utc>,
                                        phantom: _serde::__private228::PhantomData<Row>,
                                        lifetime: _serde::__private228::PhantomData<&'de ()>,
                                    }
                                    #[automatically_derived]
                                    impl<'de> _serde::Deserialize<'de> for
                                        __DeserializeWith<'de> {
                                        fn deserialize<__D>(__deserializer: __D)
                                            -> _serde::__private228::Result<Self, __D::Error> where
                                            __D: _serde::Deserializer<'de> {
                                            _serde::__private228::Ok(__DeserializeWith {
                                                    value: crate::datetime::de(__deserializer)?,
                                                    phantom: _serde::__private228::PhantomData,
                                                    lifetime: _serde::__private228::PhantomData,
                                                })
                                        }
                                    }
                                    _serde::__private228::Option::map(_serde::de::SeqAccess::next_element::<__DeserializeWith<'de>>(&mut __seq)?,
                                        |__wrap| __wrap.value)
                                } {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(4usize,
                                                &"struct Row with 26 elements")),
                            };
                        let __field5 =
                            match {
                                    #[doc(hidden)]
                                    struct __DeserializeWith<'de> {
                                        value: DateTime<Utc>,
                                        phantom: _serde::__private228::PhantomData<Row>,
                                        lifetime: _serde::__private228::PhantomData<&'de ()>,
                                    }
                                    #[automatically_derived]
                                    impl<'de> _serde::Deserialize<'de> for
                                        __DeserializeWith<'de> {
                                        fn deserialize<__D>(__deserializer: __D)
                                            -> _serde::__private228::Result<Self, __D::Error> where
                                            __D: _serde::Deserializer<'de> {
                                            _serde::__private228::Ok(__DeserializeWith {
                                                    value: crate::datetime::de(__deserializer)?,
                                                    phantom: _serde::__private228::PhantomData,
                                                    lifetime: _serde::__private228::PhantomData,
                                                })
                                        }
                                    }
                                    _serde::__private228::Option::map(_serde::de::SeqAccess::next_element::<__DeserializeWith<'de>>(&mut __seq)?,
                                        |__wrap| __wrap.value)
                                } {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(5usize,
                                                &"struct Row with 26 elements")),
                            };
                        let __field6 =
                            match _serde::de::SeqAccess::next_element::<u64>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(6usize,
                                                &"struct Row with 26 elements")),
                            };
                        let __field7 =
                            match {
                                    #[doc(hidden)]
                                    struct __DeserializeWith<'de> {
                                        value: Map<String, Vec<String>>,
                                        phantom: _serde::__private228::PhantomData<Row>,
                                        lifetime: _serde::__private228::PhantomData<&'de ()>,
                                    }
                                    #[automatically_derived]
                                    impl<'de> _serde::Deserialize<'de> for
                                        __DeserializeWith<'de> {
                                        fn deserialize<__D>(__deserializer: __D)
                                            -> _serde::__private228::Result<Self, __D::Error> where
                                            __D: _serde::Deserializer<'de> {
                                            _serde::__private228::Ok(__DeserializeWith {
                                                    value: features_map(__deserializer)?,
                                                    phantom: _serde::__private228::PhantomData,
                                                    lifetime: _serde::__private228::PhantomData,
                                                })
                                        }
                                    }
                                    _serde::__private228::Option::map(_serde::de::SeqAccess::next_element::<__DeserializeWith<'de>>(&mut __seq)?,
                                        |__wrap| __wrap.value)
                                } {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(7usize,
                                                &"struct Row with 26 elements")),
                            };
                        let __field8 =
                            match {
                                    #[doc(hidden)]
                                    struct __DeserializeWith<'de> {
                                        value: bool,
                                        phantom: _serde::__private228::PhantomData<Row>,
                                        lifetime: _serde::__private228::PhantomData<&'de ()>,
                                    }
                                    #[automatically_derived]
                                    impl<'de> _serde::Deserialize<'de> for
                                        __DeserializeWith<'de> {
                                        fn deserialize<__D>(__deserializer: __D)
                                            -> _serde::__private228::Result<Self, __D::Error> where
                                            __D: _serde::Deserializer<'de> {
                                            _serde::__private228::Ok(__DeserializeWith {
                                                    value: crate::bool::de(__deserializer)?,
                                                    phantom: _serde::__private228::PhantomData,
                                                    lifetime: _serde::__private228::PhantomData,
                                                })
                                        }
                                    }
                                    _serde::__private228::Option::map(_serde::de::SeqAccess::next_element::<__DeserializeWith<'de>>(&mut __seq)?,
                                        |__wrap| __wrap.value)
                                } {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(8usize,
                                                &"struct Row with 26 elements")),
                            };
                        let __field9 =
                            match _serde::de::SeqAccess::next_element::<String>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(9usize,
                                                &"struct Row with 26 elements")),
                            };
                        let __field10 =
                            match _serde::de::SeqAccess::next_element::<Option<u64>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(10usize,
                                                &"struct Row with 26 elements")),
                            };
                        let __field11 =
                            match _serde::de::SeqAccess::next_element::<Option<UserId>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(11usize,
                                                &"struct Row with 26 elements")),
                            };
                        let __field12 =
                            match {
                                    #[doc(hidden)]
                                    struct __DeserializeWith<'de> {
                                        value: [u8; 32],
                                        phantom: _serde::__private228::PhantomData<Row>,
                                        lifetime: _serde::__private228::PhantomData<&'de ()>,
                                    }
                                    #[automatically_derived]
                                    impl<'de> _serde::Deserialize<'de> for
                                        __DeserializeWith<'de> {
                                        fn deserialize<__D>(__deserializer: __D)
                                            -> _serde::__private228::Result<Self, __D::Error> where
                                            __D: _serde::Deserializer<'de> {
                                            _serde::__private228::Ok(__DeserializeWith {
                                                    value: sha256(__deserializer)?,
                                                    phantom: _serde::__private228::PhantomData,
                                                    lifetime: _serde::__private228::PhantomData,
                                                })
                                        }
                                    }
                                    _serde::__private228::Option::map(_serde::de::SeqAccess::next_element::<__DeserializeWith<'de>>(&mut __seq)?,
                                        |__wrap| __wrap.value)
                                } {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(12usize,
                                                &"struct Row with 26 elements")),
                            };
                        let __field13 =
                            match _serde::de::SeqAccess::next_element::<Option<String>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    _serde::__private228::Default::default(),
                            };
                        let __field14 =
                            match {
                                    #[doc(hidden)]
                                    struct __DeserializeWith<'de> {
                                        value: Option<Version>,
                                        phantom: _serde::__private228::PhantomData<Row>,
                                        lifetime: _serde::__private228::PhantomData<&'de ()>,
                                    }
                                    #[automatically_derived]
                                    impl<'de> _serde::Deserialize<'de> for
                                        __DeserializeWith<'de> {
                                        fn deserialize<__D>(__deserializer: __D)
                                            -> _serde::__private228::Result<Self, __D::Error> where
                                            __D: _serde::Deserializer<'de> {
                                            _serde::__private228::Ok(__DeserializeWith {
                                                    value: rust_version(__deserializer)?,
                                                    phantom: _serde::__private228::PhantomData,
                                                    lifetime: _serde::__private228::PhantomData,
                                                })
                                        }
                                    }
                                    _serde::__private228::Option::map(_serde::de::SeqAccess::next_element::<__DeserializeWith<'de>>(&mut __seq)?,
                                        |__wrap| __wrap.value)
                                } {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    _serde::__private228::Default::default(),
                            };
                        let __field15 =
                            match {
                                    #[doc(hidden)]
                                    struct __DeserializeWith<'de> {
                                        value: bool,
                                        phantom: _serde::__private228::PhantomData<Row>,
                                        lifetime: _serde::__private228::PhantomData<&'de ()>,
                                    }
                                    #[automatically_derived]
                                    impl<'de> _serde::Deserialize<'de> for
                                        __DeserializeWith<'de> {
                                        fn deserialize<__D>(__deserializer: __D)
                                            -> _serde::__private228::Result<Self, __D::Error> where
                                            __D: _serde::Deserializer<'de> {
                                            _serde::__private228::Ok(__DeserializeWith {
                                                    value: has_lib(__deserializer)?,
                                                    phantom: _serde::__private228::PhantomData,
                                                    lifetime: _serde::__private228::PhantomData,
                                                })
                                        }
                                    }
                                    _serde::__private228::Option::map(_serde::de::SeqAccess::next_element::<__DeserializeWith<'de>>(&mut __seq)?,
                                        |__wrap| __wrap.value)
                                } {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    _serde::__private228::Default::default(),
                            };
                        let __field16 =
                            match {
                                    #[doc(hidden)]
                                    struct __DeserializeWith<'de> {
                                        value: Vec<String>,
                                        phantom: _serde::__private228::PhantomData<Row>,
                                        lifetime: _serde::__private228::PhantomData<&'de ()>,
                                    }
                                    #[automatically_derived]
                                    impl<'de> _serde::Deserialize<'de> for
                                        __DeserializeWith<'de> {
                                        fn deserialize<__D>(__deserializer: __D)
                                            -> _serde::__private228::Result<Self, __D::Error> where
                                            __D: _serde::Deserializer<'de> {
                                            _serde::__private228::Ok(__DeserializeWith {
                                                    value: bin_names(__deserializer)?,
                                                    phantom: _serde::__private228::PhantomData,
                                                    lifetime: _serde::__private228::PhantomData,
                                                })
                                        }
                                    }
                                    _serde::__private228::Option::map(_serde::de::SeqAccess::next_element::<__DeserializeWith<'de>>(&mut __seq)?,
                                        |__wrap| __wrap.value)
                                } {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    _serde::__private228::Default::default(),
                            };
                        let __field17 =
                            match _serde::de::SeqAccess::next_element::<Option<u16>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(17usize,
                                                &"struct Row with 26 elements")),
                            };
                        let __field18 =
                            match _serde::de::SeqAccess::next_element::<Option<String>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(18usize,
                                                &"struct Row with 26 elements")),
                            };
                        let __field19 =
                            match _serde::de::SeqAccess::next_element::<Option<String>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(19usize,
                                                &"struct Row with 26 elements")),
                            };
                        let __field20 =
                            match _serde::de::SeqAccess::next_element::<Option<String>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(20usize,
                                                &"struct Row with 26 elements")),
                            };
                        let __field21 =
                            match _serde::de::SeqAccess::next_element::<Option<String>>(&mut __seq)?
                                {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(_serde::de::Error::invalid_length(21usize,
                                                &"struct Row with 26 elements")),
                            };
                        let __field22 =
                            match {
                                    #[doc(hidden)]
                                    struct __DeserializeWith<'de> {
                                        value: Vec<String>,
                                        phantom: _serde::__private228::PhantomData<Row>,
                                        lifetime: _serde::__private228::PhantomData<&'de ()>,
                                    }
                                    #[automatically_derived]
                                    impl<'de> _serde::Deserialize<'de> for
                                        __DeserializeWith<'de> {
                                        fn deserialize<__D>(__deserializer: __D)
                                            -> _serde::__private228::Result<Self, __D::Error> where
                                            __D: _serde::Deserializer<'de> {
                                            _serde::__private228::Ok(__DeserializeWith {
                                                    value: categories(__deserializer)?,
                                                    phantom: _serde::__private228::PhantomData,
                                                    lifetime: _serde::__private228::PhantomData,
                                                })
                                        }
                                    }
                                    _serde::__private228::Option::map(_serde::de::SeqAccess::next_element::<__DeserializeWith<'de>>(&mut __seq)?,
                                        |__wrap| __wrap.value)
                                } {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    _serde::__private228::Default::default(),
                            };
                        let __field23 =
                            match {
                                    #[doc(hidden)]
                                    struct __DeserializeWith<'de> {
                                        value: Vec<String>,
                                        phantom: _serde::__private228::PhantomData<Row>,
                                        lifetime: _serde::__private228::PhantomData<&'de ()>,
                                    }
                                    #[automatically_derived]
                                    impl<'de> _serde::Deserialize<'de> for
                                        __DeserializeWith<'de> {
                                        fn deserialize<__D>(__deserializer: __D)
                                            -> _serde::__private228::Result<Self, __D::Error> where
                                            __D: _serde::Deserializer<'de> {
                                            _serde::__private228::Ok(__DeserializeWith {
                                                    value: keywords(__deserializer)?,
                                                    phantom: _serde::__private228::PhantomData,
                                                    lifetime: _serde::__private228::PhantomData,
                                                })
                                        }
                                    }
                                    _serde::__private228::Option::map(_serde::de::SeqAccess::next_element::<__DeserializeWith<'de>>(&mut __seq)?,
                                        |__wrap| __wrap.value)
                                } {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    _serde::__private228::Default::default(),
                            };
                        let __field24 =
                            match {
                                    #[doc(hidden)]
                                    struct __DeserializeWith<'de> {
                                        value: [u8; 32],
                                        phantom: _serde::__private228::PhantomData<Row>,
                                        lifetime: _serde::__private228::PhantomData<&'de ()>,
                                    }
                                    #[automatically_derived]
                                    impl<'de> _serde::Deserialize<'de> for
                                        __DeserializeWith<'de> {
                                        fn deserialize<__D>(__deserializer: __D)
                                            -> _serde::__private228::Result<Self, __D::Error> where
                                            __D: _serde::Deserializer<'de> {
                                            _serde::__private228::Ok(__DeserializeWith {
                                                    value: sha256(__deserializer)?,
                                                    phantom: _serde::__private228::PhantomData,
                                                    lifetime: _serde::__private228::PhantomData,
                                                })
                                        }
                                    }
                                    _serde::__private228::Option::map(_serde::de::SeqAccess::next_element::<__DeserializeWith<'de>>(&mut __seq)?,
                                        |__wrap| __wrap.value)
                                } {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    _serde::__private228::Default::default(),
                            };
                        let __field25 =
                            match {
                                    #[doc(hidden)]
                                    struct __DeserializeWith<'de> {
                                        value: [u8; 32],
                                        phantom: _serde::__private228::PhantomData<Row>,
                                        lifetime: _serde::__private228::PhantomData<&'de ()>,
                                    }
                                    #[automatically_derived]
                                    impl<'de> _serde::Deserialize<'de> for
                                        __DeserializeWith<'de> {
                                        fn deserialize<__D>(__deserializer: __D)
                                            -> _serde::__private228::Result<Self, __D::Error> where
                                            __D: _serde::Deserializer<'de> {
                                            _serde::__private228::Ok(__DeserializeWith {
                                                    value: sha256(__deserializer)?,
                                                    phantom: _serde::__private228::PhantomData,
                                                    lifetime: _serde::__private228::PhantomData,
                                                })
                                        }
                                    }
                                    _serde::__private228::Option::map(_serde::de::SeqAccess::next_element::<__DeserializeWith<'de>>(&mut __seq)?,
                                        |__wrap| __wrap.value)
                                } {
                                _serde::__private228::Some(__value) => __value,
                                _serde::__private228::None =>
                                    _serde::__private228::Default::default(),
                            };
                        _serde::__private228::Ok(Row {
                                id: __field0,
                                crate_id: __field1,
                                num: __field2,
                                num_no_build: __field3,
                                updated_at: __field4,
                                created_at: __field5,
                                downloads: __field6,
                                features: __field7,
                                yanked: __field8,
                                license: __field9,
                                crate_size: __field10,
                                published_by: __field11,
                                tar_sha256: __field12,
                                links: __field13,
                                rust_version: __field14,
                                has_lib: __field15,
                                bin_names: __field16,
                                edition: __field17,
                                description: __field18,
                                homepage: __field19,
                                documentation: __field20,
                                repository: __field21,
                                categories: __field22,
                                keywords: __field23,
                                zip_sha256: __field24,
                                zip_json_sha256: __field25,
                            })
                    }
                    #[inline]
                    fn visit_map<__A>(self, mut __map: __A)
                        -> _serde::__private228::Result<Self::Value, __A::Error>
                        where __A: _serde::de::MapAccess<'de> {
                        let mut __field0: _serde::__private228::Option<VersionId> =
                            _serde::__private228::None;
                        let mut __field1: _serde::__private228::Option<CrateId> =
                            _serde::__private228::None;
                        let mut __field2: _serde::__private228::Option<Version> =
                            _serde::__private228::None;
                        let mut __field3: _serde::__private228::Option<IgnoredStr> =
                            _serde::__private228::None;
                        let mut __field4:
                                _serde::__private228::Option<DateTime<Utc>> =
                            _serde::__private228::None;
                        let mut __field5:
                                _serde::__private228::Option<DateTime<Utc>> =
                            _serde::__private228::None;
                        let mut __field6: _serde::__private228::Option<u64> =
                            _serde::__private228::None;
                        let mut __field7:
                                _serde::__private228::Option<Map<String, Vec<String>>> =
                            _serde::__private228::None;
                        let mut __field8: _serde::__private228::Option<bool> =
                            _serde::__private228::None;
                        let mut __field9: _serde::__private228::Option<String> =
                            _serde::__private228::None;
                        let mut __field10:
                                _serde::__private228::Option<Option<u64>> =
                            _serde::__private228::None;
                        let mut __field11:
                                _serde::__private228::Option<Option<UserId>> =
                            _serde::__private228::None;
                        let mut __field12: _serde::__private228::Option<[u8; 32]> =
                            _serde::__private228::None;
                        let mut __field13:
                                _serde::__private228::Option<Option<String>> =
                            _serde::__private228::None;
                        let mut __field14:
                                _serde::__private228::Option<Option<Version>> =
                            _serde::__private228::None;
                        let mut __field15: _serde::__private228::Option<bool> =
                            _serde::__private228::None;
                        let mut __field16:
                                _serde::__private228::Option<Vec<String>> =
                            _serde::__private228::None;
                        let mut __field17:
                                _serde::__private228::Option<Option<u16>> =
                            _serde::__private228::None;
                        let mut __field18:
                                _serde::__private228::Option<Option<String>> =
                            _serde::__private228::None;
                        let mut __field19:
                                _serde::__private228::Option<Option<String>> =
                            _serde::__private228::None;
                        let mut __field20:
                                _serde::__private228::Option<Option<String>> =
                            _serde::__private228::None;
                        let mut __field21:
                                _serde::__private228::Option<Option<String>> =
                            _serde::__private228::None;
                        let mut __field22:
                                _serde::__private228::Option<Vec<String>> =
                            _serde::__private228::None;
                        let mut __field23:
                                _serde::__private228::Option<Vec<String>> =
                            _serde::__private228::None;
                        let mut __field24: _serde::__private228::Option<[u8; 32]> =
                            _serde::__private228::None;
                        let mut __field25: _serde::__private228::Option<[u8; 32]> =
                            _serde::__private228::None;
                        while let _serde::__private228::Some(__key) =
                                _serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
                            match __key {
                                __Field::__field0 => {
                                    if _serde::__private228::Option::is_some(&__field0) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("id"));
                                    }
                                    __field0 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<VersionId>(&mut __map)?);
                                }
                                __Field::__field1 => {
                                    if _serde::__private228::Option::is_some(&__field1) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("crate_id"));
                                    }
                                    __field1 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<CrateId>(&mut __map)?);
                                }
                                __Field::__field2 => {
                                    if _serde::__private228::Option::is_some(&__field2) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("num"));
                                    }
                                    __field2 =
                                        _serde::__private228::Some({
                                                #[doc(hidden)]
                                                struct __DeserializeWith<'de> {
                                                    value: Version,
                                                    phantom: _serde::__private228::PhantomData<Row>,
                                                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                                                }
                                                #[automatically_derived]
                                                impl<'de> _serde::Deserialize<'de> for
                                                    __DeserializeWith<'de> {
                                                    fn deserialize<__D>(__deserializer: __D)
                                                        -> _serde::__private228::Result<Self, __D::Error> where
                                                        __D: _serde::Deserializer<'de> {
                                                        _serde::__private228::Ok(__DeserializeWith {
                                                                value: version(__deserializer)?,
                                                                phantom: _serde::__private228::PhantomData,
                                                                lifetime: _serde::__private228::PhantomData,
                                                            })
                                                    }
                                                }
                                                match _serde::de::MapAccess::next_value::<__DeserializeWith<'de>>(&mut __map)
                                                    {
                                                    _serde::__private228::Ok(__wrapper) => __wrapper.value,
                                                    _serde::__private228::Err(__err) => {
                                                        return _serde::__private228::Err(__err);
                                                    }
                                                }
                                            });
                                }
                                __Field::__field3 => {
                                    if _serde::__private228::Option::is_some(&__field3) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("num_no_build"));
                                    }
                                    __field3 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<IgnoredStr>(&mut __map)?);
                                }
                                __Field::__field4 => {
                                    if _serde::__private228::Option::is_some(&__field4) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("updated_at"));
                                    }
                                    __field4 =
                                        _serde::__private228::Some({
                                                #[doc(hidden)]
                                                struct __DeserializeWith<'de> {
                                                    value: DateTime<Utc>,
                                                    phantom: _serde::__private228::PhantomData<Row>,
                                                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                                                }
                                                #[automatically_derived]
                                                impl<'de> _serde::Deserialize<'de> for
                                                    __DeserializeWith<'de> {
                                                    fn deserialize<__D>(__deserializer: __D)
                                                        -> _serde::__private228::Result<Self, __D::Error> where
                                                        __D: _serde::Deserializer<'de> {
                                                        _serde::__private228::Ok(__DeserializeWith {
                                                                value: crate::datetime::de(__deserializer)?,
                                                                phantom: _serde::__private228::PhantomData,
                                                                lifetime: _serde::__private228::PhantomData,
                                                            })
                                                    }
                                                }
                                                match _serde::de::MapAccess::next_value::<__DeserializeWith<'de>>(&mut __map)
                                                    {
                                                    _serde::__private228::Ok(__wrapper) => __wrapper.value,
                                                    _serde::__private228::Err(__err) => {
                                                        return _serde::__private228::Err(__err);
                                                    }
                                                }
                                            });
                                }
                                __Field::__field5 => {
                                    if _serde::__private228::Option::is_some(&__field5) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("created_at"));
                                    }
                                    __field5 =
                                        _serde::__private228::Some({
                                                #[doc(hidden)]
                                                struct __DeserializeWith<'de> {
                                                    value: DateTime<Utc>,
                                                    phantom: _serde::__private228::PhantomData<Row>,
                                                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                                                }
                                                #[automatically_derived]
                                                impl<'de> _serde::Deserialize<'de> for
                                                    __DeserializeWith<'de> {
                                                    fn deserialize<__D>(__deserializer: __D)
                                                        -> _serde::__private228::Result<Self, __D::Error> where
                                                        __D: _serde::Deserializer<'de> {
                                                        _serde::__private228::Ok(__DeserializeWith {
                                                                value: crate::datetime::de(__deserializer)?,
                                                                phantom: _serde::__private228::PhantomData,
                                                                lifetime: _serde::__private228::PhantomData,
                                                            })
                                                    }
                                                }
                                                match _serde::de::MapAccess::next_value::<__DeserializeWith<'de>>(&mut __map)
                                                    {
                                                    _serde::__private228::Ok(__wrapper) => __wrapper.value,
                                                    _serde::__private228::Err(__err) => {
                                                        return _serde::__private228::Err(__err);
                                                    }
                                                }
                                            });
                                }
                                __Field::__field6 => {
                                    if _serde::__private228::Option::is_some(&__field6) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("downloads"));
                                    }
                                    __field6 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<u64>(&mut __map)?);
                                }
                                __Field::__field7 => {
                                    if _serde::__private228::Option::is_some(&__field7) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("features"));
                                    }
                                    __field7 =
                                        _serde::__private228::Some({
                                                #[doc(hidden)]
                                                struct __DeserializeWith<'de> {
                                                    value: Map<String, Vec<String>>,
                                                    phantom: _serde::__private228::PhantomData<Row>,
                                                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                                                }
                                                #[automatically_derived]
                                                impl<'de> _serde::Deserialize<'de> for
                                                    __DeserializeWith<'de> {
                                                    fn deserialize<__D>(__deserializer: __D)
                                                        -> _serde::__private228::Result<Self, __D::Error> where
                                                        __D: _serde::Deserializer<'de> {
                                                        _serde::__private228::Ok(__DeserializeWith {
                                                                value: features_map(__deserializer)?,
                                                                phantom: _serde::__private228::PhantomData,
                                                                lifetime: _serde::__private228::PhantomData,
                                                            })
                                                    }
                                                }
                                                match _serde::de::MapAccess::next_value::<__DeserializeWith<'de>>(&mut __map)
                                                    {
                                                    _serde::__private228::Ok(__wrapper) => __wrapper.value,
                                                    _serde::__private228::Err(__err) => {
                                                        return _serde::__private228::Err(__err);
                                                    }
                                                }
                                            });
                                }
                                __Field::__field8 => {
                                    if _serde::__private228::Option::is_some(&__field8) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("yanked"));
                                    }
                                    __field8 =
                                        _serde::__private228::Some({
                                                #[doc(hidden)]
                                                struct __DeserializeWith<'de> {
                                                    value: bool,
                                                    phantom: _serde::__private228::PhantomData<Row>,
                                                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                                                }
                                                #[automatically_derived]
                                                impl<'de> _serde::Deserialize<'de> for
                                                    __DeserializeWith<'de> {
                                                    fn deserialize<__D>(__deserializer: __D)
                                                        -> _serde::__private228::Result<Self, __D::Error> where
                                                        __D: _serde::Deserializer<'de> {
                                                        _serde::__private228::Ok(__DeserializeWith {
                                                                value: crate::bool::de(__deserializer)?,
                                                                phantom: _serde::__private228::PhantomData,
                                                                lifetime: _serde::__private228::PhantomData,
                                                            })
                                                    }
                                                }
                                                match _serde::de::MapAccess::next_value::<__DeserializeWith<'de>>(&mut __map)
                                                    {
                                                    _serde::__private228::Ok(__wrapper) => __wrapper.value,
                                                    _serde::__private228::Err(__err) => {
                                                        return _serde::__private228::Err(__err);
                                                    }
                                                }
                                            });
                                }
                                __Field::__field9 => {
                                    if _serde::__private228::Option::is_some(&__field9) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("license"));
                                    }
                                    __field9 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<String>(&mut __map)?);
                                }
                                __Field::__field10 => {
                                    if _serde::__private228::Option::is_some(&__field10) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("crate_size"));
                                    }
                                    __field10 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<u64>>(&mut __map)?);
                                }
                                __Field::__field11 => {
                                    if _serde::__private228::Option::is_some(&__field11) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("published_by"));
                                    }
                                    __field11 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<UserId>>(&mut __map)?);
                                }
                                __Field::__field12 => {
                                    if _serde::__private228::Option::is_some(&__field12) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("tar_sha256"));
                                    }
                                    __field12 =
                                        _serde::__private228::Some({
                                                #[doc(hidden)]
                                                struct __DeserializeWith<'de> {
                                                    value: [u8; 32],
                                                    phantom: _serde::__private228::PhantomData<Row>,
                                                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                                                }
                                                #[automatically_derived]
                                                impl<'de> _serde::Deserialize<'de> for
                                                    __DeserializeWith<'de> {
                                                    fn deserialize<__D>(__deserializer: __D)
                                                        -> _serde::__private228::Result<Self, __D::Error> where
                                                        __D: _serde::Deserializer<'de> {
                                                        _serde::__private228::Ok(__DeserializeWith {
                                                                value: sha256(__deserializer)?,
                                                                phantom: _serde::__private228::PhantomData,
                                                                lifetime: _serde::__private228::PhantomData,
                                                            })
                                                    }
                                                }
                                                match _serde::de::MapAccess::next_value::<__DeserializeWith<'de>>(&mut __map)
                                                    {
                                                    _serde::__private228::Ok(__wrapper) => __wrapper.value,
                                                    _serde::__private228::Err(__err) => {
                                                        return _serde::__private228::Err(__err);
                                                    }
                                                }
                                            });
                                }
                                __Field::__field13 => {
                                    if _serde::__private228::Option::is_some(&__field13) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("links"));
                                    }
                                    __field13 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<String>>(&mut __map)?);
                                }
                                __Field::__field14 => {
                                    if _serde::__private228::Option::is_some(&__field14) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("rust_version"));
                                    }
                                    __field14 =
                                        _serde::__private228::Some({
                                                #[doc(hidden)]
                                                struct __DeserializeWith<'de> {
                                                    value: Option<Version>,
                                                    phantom: _serde::__private228::PhantomData<Row>,
                                                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                                                }
                                                #[automatically_derived]
                                                impl<'de> _serde::Deserialize<'de> for
                                                    __DeserializeWith<'de> {
                                                    fn deserialize<__D>(__deserializer: __D)
                                                        -> _serde::__private228::Result<Self, __D::Error> where
                                                        __D: _serde::Deserializer<'de> {
                                                        _serde::__private228::Ok(__DeserializeWith {
                                                                value: rust_version(__deserializer)?,
                                                                phantom: _serde::__private228::PhantomData,
                                                                lifetime: _serde::__private228::PhantomData,
                                                            })
                                                    }
                                                }
                                                match _serde::de::MapAccess::next_value::<__DeserializeWith<'de>>(&mut __map)
                                                    {
                                                    _serde::__private228::Ok(__wrapper) => __wrapper.value,
                                                    _serde::__private228::Err(__err) => {
                                                        return _serde::__private228::Err(__err);
                                                    }
                                                }
                                            });
                                }
                                __Field::__field15 => {
                                    if _serde::__private228::Option::is_some(&__field15) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("has_lib"));
                                    }
                                    __field15 =
                                        _serde::__private228::Some({
                                                #[doc(hidden)]
                                                struct __DeserializeWith<'de> {
                                                    value: bool,
                                                    phantom: _serde::__private228::PhantomData<Row>,
                                                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                                                }
                                                #[automatically_derived]
                                                impl<'de> _serde::Deserialize<'de> for
                                                    __DeserializeWith<'de> {
                                                    fn deserialize<__D>(__deserializer: __D)
                                                        -> _serde::__private228::Result<Self, __D::Error> where
                                                        __D: _serde::Deserializer<'de> {
                                                        _serde::__private228::Ok(__DeserializeWith {
                                                                value: has_lib(__deserializer)?,
                                                                phantom: _serde::__private228::PhantomData,
                                                                lifetime: _serde::__private228::PhantomData,
                                                            })
                                                    }
                                                }
                                                match _serde::de::MapAccess::next_value::<__DeserializeWith<'de>>(&mut __map)
                                                    {
                                                    _serde::__private228::Ok(__wrapper) => __wrapper.value,
                                                    _serde::__private228::Err(__err) => {
                                                        return _serde::__private228::Err(__err);
                                                    }
                                                }
                                            });
                                }
                                __Field::__field16 => {
                                    if _serde::__private228::Option::is_some(&__field16) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("bin_names"));
                                    }
                                    __field16 =
                                        _serde::__private228::Some({
                                                #[doc(hidden)]
                                                struct __DeserializeWith<'de> {
                                                    value: Vec<String>,
                                                    phantom: _serde::__private228::PhantomData<Row>,
                                                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                                                }
                                                #[automatically_derived]
                                                impl<'de> _serde::Deserialize<'de> for
                                                    __DeserializeWith<'de> {
                                                    fn deserialize<__D>(__deserializer: __D)
                                                        -> _serde::__private228::Result<Self, __D::Error> where
                                                        __D: _serde::Deserializer<'de> {
                                                        _serde::__private228::Ok(__DeserializeWith {
                                                                value: bin_names(__deserializer)?,
                                                                phantom: _serde::__private228::PhantomData,
                                                                lifetime: _serde::__private228::PhantomData,
                                                            })
                                                    }
                                                }
                                                match _serde::de::MapAccess::next_value::<__DeserializeWith<'de>>(&mut __map)
                                                    {
                                                    _serde::__private228::Ok(__wrapper) => __wrapper.value,
                                                    _serde::__private228::Err(__err) => {
                                                        return _serde::__private228::Err(__err);
                                                    }
                                                }
                                            });
                                }
                                __Field::__field17 => {
                                    if _serde::__private228::Option::is_some(&__field17) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("edition"));
                                    }
                                    __field17 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<u16>>(&mut __map)?);
                                }
                                __Field::__field18 => {
                                    if _serde::__private228::Option::is_some(&__field18) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("description"));
                                    }
                                    __field18 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<String>>(&mut __map)?);
                                }
                                __Field::__field19 => {
                                    if _serde::__private228::Option::is_some(&__field19) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("homepage"));
                                    }
                                    __field19 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<String>>(&mut __map)?);
                                }
                                __Field::__field20 => {
                                    if _serde::__private228::Option::is_some(&__field20) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("documentation"));
                                    }
                                    __field20 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<String>>(&mut __map)?);
                                }
                                __Field::__field21 => {
                                    if _serde::__private228::Option::is_some(&__field21) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("repository"));
                                    }
                                    __field21 =
                                        _serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<String>>(&mut __map)?);
                                }
                                __Field::__field22 => {
                                    if _serde::__private228::Option::is_some(&__field22) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("categories"));
                                    }
                                    __field22 =
                                        _serde::__private228::Some({
                                                #[doc(hidden)]
                                                struct __DeserializeWith<'de> {
                                                    value: Vec<String>,
                                                    phantom: _serde::__private228::PhantomData<Row>,
                                                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                                                }
                                                #[automatically_derived]
                                                impl<'de> _serde::Deserialize<'de> for
                                                    __DeserializeWith<'de> {
                                                    fn deserialize<__D>(__deserializer: __D)
                                                        -> _serde::__private228::Result<Self, __D::Error> where
                                                        __D: _serde::Deserializer<'de> {
                                                        _serde::__private228::Ok(__DeserializeWith {
                                                                value: categories(__deserializer)?,
                                                                phantom: _serde::__private228::PhantomData,
                                                                lifetime: _serde::__private228::PhantomData,
                                                            })
                                                    }
                                                }
                                                match _serde::de::MapAccess::next_value::<__DeserializeWith<'de>>(&mut __map)
                                                    {
                                                    _serde::__private228::Ok(__wrapper) => __wrapper.value,
                                                    _serde::__private228::Err(__err) => {
                                                        return _serde::__private228::Err(__err);
                                                    }
                                                }
                                            });
                                }
                                __Field::__field23 => {
                                    if _serde::__private228::Option::is_some(&__field23) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("keywords"));
                                    }
                                    __field23 =
                                        _serde::__private228::Some({
                                                #[doc(hidden)]
                                                struct __DeserializeWith<'de> {
                                                    value: Vec<String>,
                                                    phantom: _serde::__private228::PhantomData<Row>,
                                                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                                                }
                                                #[automatically_derived]
                                                impl<'de> _serde::Deserialize<'de> for
                                                    __DeserializeWith<'de> {
                                                    fn deserialize<__D>(__deserializer: __D)
                                                        -> _serde::__private228::Result<Self, __D::Error> where
                                                        __D: _serde::Deserializer<'de> {
                                                        _serde::__private228::Ok(__DeserializeWith {
                                                                value: keywords(__deserializer)?,
                                                                phantom: _serde::__private228::PhantomData,
                                                                lifetime: _serde::__private228::PhantomData,
                                                            })
                                                    }
                                                }
                                                match _serde::de::MapAccess::next_value::<__DeserializeWith<'de>>(&mut __map)
                                                    {
                                                    _serde::__private228::Ok(__wrapper) => __wrapper.value,
                                                    _serde::__private228::Err(__err) => {
                                                        return _serde::__private228::Err(__err);
                                                    }
                                                }
                                            });
                                }
                                __Field::__field24 => {
                                    if _serde::__private228::Option::is_some(&__field24) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("zip_sha256"));
                                    }
                                    __field24 =
                                        _serde::__private228::Some({
                                                #[doc(hidden)]
                                                struct __DeserializeWith<'de> {
                                                    value: [u8; 32],
                                                    phantom: _serde::__private228::PhantomData<Row>,
                                                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                                                }
                                                #[automatically_derived]
                                                impl<'de> _serde::Deserialize<'de> for
                                                    __DeserializeWith<'de> {
                                                    fn deserialize<__D>(__deserializer: __D)
                                                        -> _serde::__private228::Result<Self, __D::Error> where
                                                        __D: _serde::Deserializer<'de> {
                                                        _serde::__private228::Ok(__DeserializeWith {
                                                                value: sha256(__deserializer)?,
                                                                phantom: _serde::__private228::PhantomData,
                                                                lifetime: _serde::__private228::PhantomData,
                                                            })
                                                    }
                                                }
                                                match _serde::de::MapAccess::next_value::<__DeserializeWith<'de>>(&mut __map)
                                                    {
                                                    _serde::__private228::Ok(__wrapper) => __wrapper.value,
                                                    _serde::__private228::Err(__err) => {
                                                        return _serde::__private228::Err(__err);
                                                    }
                                                }
                                            });
                                }
                                __Field::__field25 => {
                                    if _serde::__private228::Option::is_some(&__field25) {
                                        return _serde::__private228::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("zip_json_sha256"));
                                    }
                                    __field25 =
                                        _serde::__private228::Some({
                                                #[doc(hidden)]
                                                struct __DeserializeWith<'de> {
                                                    value: [u8; 32],
                                                    phantom: _serde::__private228::PhantomData<Row>,
                                                    lifetime: _serde::__private228::PhantomData<&'de ()>,
                                                }
                                                #[automatically_derived]
                                                impl<'de> _serde::Deserialize<'de> for
                                                    __DeserializeWith<'de> {
                                                    fn deserialize<__D>(__deserializer: __D)
                                                        -> _serde::__private228::Result<Self, __D::Error> where
                                                        __D: _serde::Deserializer<'de> {
                                                        _serde::__private228::Ok(__DeserializeWith {
                                                                value: sha256(__deserializer)?,
                                                                phantom: _serde::__private228::PhantomData,
                                                                lifetime: _serde::__private228::PhantomData,
                                                            })
                                                    }
                                                }
                                                match _serde::de::MapAccess::next_value::<__DeserializeWith<'de>>(&mut __map)
                                                    {
                                                    _serde::__private228::Ok(__wrapper) => __wrapper.value,
                                                    _serde::__private228::Err(__err) => {
                                                        return _serde::__private228::Err(__err);
                                                    }
                                                }
                                            });
                                }
                            }
                        }
                        let __field0 =
                            match __field0 {
                                _serde::__private228::Some(__field0) => __field0,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("id")?,
                            };
                        let __field1 =
                            match __field1 {
                                _serde::__private228::Some(__field1) => __field1,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("crate_id")?,
                            };
                        let __field2 =
                            match __field2 {
                                _serde::__private228::Some(__field2) => __field2,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(<__A::Error as
                                                    _serde::de::Error>::missing_field("num")),
                            };
                        let __field3 =
                            match __field3 {
                                _serde::__private228::Some(__field3) => __field3,
                                _serde::__private228::None =>
                                    _serde::__private228::Default::default(),
                            };
                        let __field4 =
                            match __field4 {
                                _serde::__private228::Some(__field4) => __field4,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(<__A::Error as
                                                    _serde::de::Error>::missing_field("updated_at")),
                            };
                        let __field5 =
                            match __field5 {
                                _serde::__private228::Some(__field5) => __field5,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(<__A::Error as
                                                    _serde::de::Error>::missing_field("created_at")),
                            };
                        let __field6 =
                            match __field6 {
                                _serde::__private228::Some(__field6) => __field6,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("downloads")?,
                            };
                        let __field7 =
                            match __field7 {
                                _serde::__private228::Some(__field7) => __field7,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(<__A::Error as
                                                    _serde::de::Error>::missing_field("features")),
                            };
                        let __field8 =
                            match __field8 {
                                _serde::__private228::Some(__field8) => __field8,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(<__A::Error as
                                                    _serde::de::Error>::missing_field("yanked")),
                            };
                        let __field9 =
                            match __field9 {
                                _serde::__private228::Some(__field9) => __field9,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("license")?,
                            };
                        let __field10 =
                            match __field10 {
                                _serde::__private228::Some(__field10) => __field10,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("crate_size")?,
                            };
                        let __field11 =
                            match __field11 {
                                _serde::__private228::Some(__field11) => __field11,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("published_by")?,
                            };
                        let __field12 =
                            match __field12 {
                                _serde::__private228::Some(__field12) => __field12,
                                _serde::__private228::None =>
                                    return _serde::__private228::Err(<__A::Error as
                                                    _serde::de::Error>::missing_field("tar_sha256")),
                            };
                        let __field13 =
                            match __field13 {
                                _serde::__private228::Some(__field13) => __field13,
                                _serde::__private228::None =>
                                    _serde::__private228::Default::default(),
                            };
                        let __field14 =
                            match __field14 {
                                _serde::__private228::Some(__field14) => __field14,
                                _serde::__private228::None =>
                                    _serde::__private228::Default::default(),
                            };
                        let __field15 =
                            match __field15 {
                                _serde::__private228::Some(__field15) => __field15,
                                _serde::__private228::None =>
                                    _serde::__private228::Default::default(),
                            };
                        let __field16 =
                            match __field16 {
                                _serde::__private228::Some(__field16) => __field16,
                                _serde::__private228::None =>
                                    _serde::__private228::Default::default(),
                            };
                        let __field17 =
                            match __field17 {
                                _serde::__private228::Some(__field17) => __field17,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("edition")?,
                            };
                        let __field18 =
                            match __field18 {
                                _serde::__private228::Some(__field18) => __field18,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("description")?,
                            };
                        let __field19 =
                            match __field19 {
                                _serde::__private228::Some(__field19) => __field19,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("homepage")?,
                            };
                        let __field20 =
                            match __field20 {
                                _serde::__private228::Some(__field20) => __field20,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("documentation")?,
                            };
                        let __field21 =
                            match __field21 {
                                _serde::__private228::Some(__field21) => __field21,
                                _serde::__private228::None =>
                                    _serde::__private228::de::missing_field("repository")?,
                            };
                        let __field22 =
                            match __field22 {
                                _serde::__private228::Some(__field22) => __field22,
                                _serde::__private228::None =>
                                    _serde::__private228::Default::default(),
                            };
                        let __field23 =
                            match __field23 {
                                _serde::__private228::Some(__field23) => __field23,
                                _serde::__private228::None =>
                                    _serde::__private228::Default::default(),
                            };
                        let __field24 =
                            match __field24 {
                                _serde::__private228::Some(__field24) => __field24,
                                _serde::__private228::None =>
                                    _serde::__private228::Default::default(),
                            };
                        let __field25 =
                            match __field25 {
                                _serde::__private228::Some(__field25) => __field25,
                                _serde::__private228::None =>
                                    _serde::__private228::Default::default(),
                            };
                        _serde::__private228::Ok(Row {
                                id: __field0,
                                crate_id: __field1,
                                num: __field2,
                                num_no_build: __field3,
                                updated_at: __field4,
                                created_at: __field5,
                                downloads: __field6,
                                features: __field7,
                                yanked: __field8,
                                license: __field9,
                                crate_size: __field10,
                                published_by: __field11,
                                tar_sha256: __field12,
                                links: __field13,
                                rust_version: __field14,
                                has_lib: __field15,
                                bin_names: __field16,
                                edition: __field17,
                                description: __field18,
                                homepage: __field19,
                                documentation: __field20,
                                repository: __field21,
                                categories: __field22,
                                keywords: __field23,
                                zip_sha256: __field24,
                                zip_json_sha256: __field25,
                            })
                    }
                }
                #[doc(hidden)]
                const FIELDS: &'static [&'static str] =
                    &["id", "crate_id", "num", "num_no_build", "updated_at",
                                "created_at", "downloads", "features", "yanked", "license",
                                "crate_size", "published_by", "tar_sha256", "links",
                                "rust_version", "has_lib", "bin_names", "edition",
                                "description", "homepage", "documentation", "repository",
                                "categories", "keywords", "zip_sha256", "zip_json_sha256"];
                _serde::Deserializer::deserialize_struct(__deserializer,
                    "Row", FIELDS,
                    __Visitor {
                        marker: _serde::__private228::PhantomData::<Row>,
                        lifetime: _serde::__private228::PhantomData,
                    })
            }
        }
    };Deserialize)]
61        #[serde(deny_unknown_fields)]
62        struct Row {
63            id: VersionId,
64            crate_id: CrateId,
65            #[serde(deserialize_with = "version")]
66            num: Version,
67            #[serde(default)]
68            #[allow(dead_code)]
69            num_no_build: IgnoredStr,
70            #[serde(deserialize_with = "crate::datetime::de")]
71            updated_at: DateTime<Utc>,
72            #[serde(deserialize_with = "crate::datetime::de")]
73            created_at: DateTime<Utc>,
74            downloads: u64,
75            #[serde(deserialize_with = "features_map")]
76            features: Map<String, Vec<String>>,
77            #[serde(deserialize_with = "crate::bool::de")]
78            yanked: bool,
79            license: String,
80            crate_size: Option<u64>,
81            published_by: Option<UserId>,
82            #[serde(deserialize_with = "sha256")]
83            tar_sha256: [u8; 32],
84            #[serde(default)]
85            links: Option<String>,
86            #[serde(default, deserialize_with = "rust_version")]
87            rust_version: Option<Version>,
88            #[serde(default, deserialize_with = "has_lib")]
89            has_lib: bool,
90            #[serde(default, deserialize_with = "bin_names")]
91            bin_names: Vec<String>,
92            edition: Option<u16>,
93            description: Option<String>,
94            homepage: Option<String>,
95            documentation: Option<String>,
96            repository: Option<String>,
97            #[serde(default, deserialize_with = "categories")]
98            categories: Vec<String>,
99            #[serde(default, deserialize_with = "keywords")]
100            keywords: Vec<String>,
101            #[serde(deserialize_with = "sha256", default)]
102            zip_sha256: [u8; 32],
103            #[serde(deserialize_with = "sha256", default)]
104            zip_json_sha256: [u8; 32],
105        }
106
107        let Row {
108            id,
109            crate_id,
110            num,
111            num_no_build: _,
112            updated_at,
113            created_at,
114            downloads,
115            features,
116            yanked,
117            license,
118            crate_size,
119            published_by,
120            tar_sha256,
121            links,
122            rust_version,
123            has_lib,
124            bin_names,
125            edition,
126            description,
127            homepage,
128            documentation,
129            repository,
130            categories,
131            keywords,
132            zip_sha256,
133            zip_json_sha256,
134        } = Row::deserialize(deserializer)?;
135        Ok(Self {
136            id,
137            crate_id,
138            num,
139            updated_at,
140            created_at,
141            downloads,
142            features,
143            yanked,
144            license,
145            crate_size,
146            published_by,
147            tar_sha256,
148            links,
149            rust_version,
150            has_lib,
151            bin_names,
152            edition,
153            description,
154            homepage,
155            documentation,
156            repository,
157            categories,
158            keywords,
159            zip_sha256,
160            zip_json_sha256,
161        })
162    }
163}
164
165impl Ord for Row {
166    fn cmp(&self, other: &Self) -> Ordering {
167        VersionId::cmp(&self.id, &other.id)
168    }
169}
170
171impl PartialOrd for Row {
172    fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
173        Some(self.cmp(other))
174    }
175}
176
177impl Eq for Row {}
178
179impl PartialEq for Row {
180    fn eq(&self, other: &Self) -> bool {
181        VersionId::eq(&self.id, &other.id)
182    }
183}
184
185impl Hash for Row {
186    fn hash<H: Hasher>(&self, state: &mut H) {
187        VersionId::hash(&self.id, state);
188    }
189}
190
191impl Borrow<VersionId> for Row {
192    fn borrow(&self) -> &VersionId {
193        &self.id
194    }
195}
196
197fn compat(string: &str) -> Option<Version> {
198    let deprecated = match string {
199        "0.0.1-001" => "0.0.1-1",
200        "0.3.0-alpha.01" => "0.3.0-alpha.1",
201        "0.4.0-alpha.00" => "0.4.0-alpha.0",
202        "0.4.0-alpha.01" => "0.4.0-alpha.1",
203        _ => return None,
204    };
205    Some(deprecated.parse().unwrap())
206}
207
208struct VersionVisitor;
209
210impl<'de> Visitor<'de> for VersionVisitor {
211    type Value = Version;
212
213    fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
214        formatter.write_str("semver version")
215    }
216
217    fn visit_str<E>(self, string: &str) -> Result<Self::Value, E>
218    where
219        E: serde::de::Error,
220    {
221        match string.parse() {
222            Ok(version) => Ok(version),
223            Err(err) => {
224                if let Some(version) = compat(string) {
225                    Ok(version)
226                } else {
227                    Err(serde::de::Error::custom(format_args!("{0}: {1}", err, string)format_args!(
228                        "{}: {}",
229                        err, string,
230                    )))
231                }
232            }
233        }
234    }
235}
236
237fn version<'de, D>(deserializer: D) -> Result<Version, D::Error>
238where
239    D: Deserializer<'de>,
240{
241    deserializer.deserialize_str(VersionVisitor)
242}
243
244struct FeaturesMapVisitor;
245
246impl<'de> Visitor<'de> for FeaturesMapVisitor {
247    type Value = Map<String, Vec<String>>;
248
249    fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
250        formatter.write_str("features map")
251    }
252
253    fn visit_str<E>(self, string: &str) -> Result<Self::Value, E>
254    where
255        E: serde::de::Error,
256    {
257        serde_json::from_str(string).map_err(serde::de::Error::custom)
258    }
259}
260
261fn features_map<'de, D>(deserializer: D) -> Result<Map<String, Vec<String>>, D::Error>
262where
263    D: Deserializer<'de>,
264{
265    deserializer.deserialize_str(FeaturesMapVisitor)
266}
267
268struct Sha256Visitor;
269
270impl<'de> Visitor<'de> for Sha256Visitor {
271    type Value = [u8; 32];
272
273    fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
274        formatter.write_str("checksum as 64-character hex string")
275    }
276
277    fn visit_str<E>(self, string: &str) -> Result<Self::Value, E>
278    where
279        E: serde::de::Error,
280    {
281        if let Some(bytes) = string.strip_prefix("\\x")
282            && bytes.len() == 64
283        {
284            let mut sha256 = [0u8; 32];
285            'parse: {
286                for i in 0..32 {
287                    match u8::from_str_radix(&bytes[i * 2..][..2], 16) {
288                        Ok(byte) => sha256[i] = byte,
289                        Err(_) => break 'parse,
290                    }
291                }
292                return Ok(sha256);
293            }
294        }
295        Err(E::invalid_value(Unexpected::Str(string), &self))
296    }
297}
298
299fn sha256<'de, D>(deserializer: D) -> Result<[u8; 32], D::Error>
300where
301    D: Deserializer<'de>,
302{
303    deserializer.deserialize_str(Sha256Visitor)
304}
305
306struct RustVersionVisitor;
307
308impl<'de> Visitor<'de> for RustVersionVisitor {
309    type Value = Option<Version>;
310
311    fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
312        formatter.write_str("a compiler version number")
313    }
314
315    fn visit_str<E>(self, string: &str) -> Result<Self::Value, E>
316    where
317        E: serde::de::Error,
318    {
319        match VersionReq::from_str(string) {
320            Ok(mut req) if req.comparators.len() == 1 => {
321                let req = req.comparators.pop().unwrap();
322                if req.op == Op::Caret {
323                    Ok(Some(Version {
324                        major: req.major,
325                        minor: req.minor.unwrap_or(0),
326                        patch: req.patch.unwrap_or(0),
327                        pre: req.pre,
328                        build: BuildMetadata::EMPTY,
329                    }))
330                } else {
331                    Ok(None)
332                }
333            }
334            Ok(_) => Ok(None),
335            Err(parse_error) => Err(E::custom(parse_error)),
336        }
337    }
338
339    fn visit_some<D>(self, deserializer: D) -> Result<Self::Value, D::Error>
340    where
341        D: Deserializer<'de>,
342    {
343        deserializer.deserialize_str(self)
344    }
345
346    fn visit_none<E>(self) -> Result<Self::Value, E>
347    where
348        E: serde::de::Error,
349    {
350        Ok(None)
351    }
352}
353
354fn rust_version<'de, D>(deserializer: D) -> Result<Option<Version>, D::Error>
355where
356    D: Deserializer<'de>,
357{
358    deserializer.deserialize_option(RustVersionVisitor)
359}
360
361#[derive(#[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl<'de> _serde::Deserialize<'de> for HasLib {
            fn deserialize<__D>(__deserializer: __D)
                -> _serde::__private228::Result<Self, __D::Error> where
                __D: _serde::Deserializer<'de> {
                _serde::__private228::Result::map(crate::bool::de(__deserializer),
                    |__transparent| HasLib { 0: __transparent })
            }
        }
    };Deserialize)]
362#[serde(transparent)]
363struct HasLib(#[serde(deserialize_with = "crate::bool::de")] bool);
364
365fn has_lib<'de, D>(deserializer: D) -> Result<bool, D::Error>
366where
367    D: Deserializer<'de>,
368{
369    match Deserialize::deserialize(deserializer)? {
370        Some(HasLib(has_lib)) => Ok(has_lib),
371        None => Ok(false),
372    }
373}
374
375fn bin_names<'de, D>(deserializer: D) -> Result<Vec<String>, D::Error>
376where
377    D: Deserializer<'de>,
378{
379    crate::set::optional(deserializer, "binary names set")
380}
381
382fn categories<'de, D>(deserializer: D) -> Result<Vec<String>, D::Error>
383where
384    D: Deserializer<'de>,
385{
386    crate::set::de(deserializer, "categories set")
387}
388
389fn keywords<'de, D>(deserializer: D) -> Result<Vec<String>, D::Error>
390where
391    D: Deserializer<'de>,
392{
393    crate::set::de(deserializer, "keywords set")
394}