Skip to main content

polyester/gen/buffa/
chain.analytics.v1.rs

1// @generated by buffa-codegen. DO NOT EDIT.
2
3/// ChainAnalyticsRange selects a standard chart window and default bucket size.
4#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug)]
5#[repr(i32)]
6pub enum ChainAnalyticsRange {
7    /// Default chart range. The server treats this as 1 day.
8    RANGE_UNSPECIFIED = 0i32,
9    /// 1 day.
10    DAY_1 = 1i32,
11    /// 7 days.
12    DAY_7 = 2i32,
13    /// 30 days.
14    DAY_30 = 3i32,
15    /// 90 days.
16    DAY_90 = 4i32,
17    /// 180 days.
18    DAY_180 = 5i32,
19    /// 365 days.
20    DAY_365 = 6i32,
21}
22impl ChainAnalyticsRange {
23    ///Idiomatic alias for [`Self::RANGE_UNSPECIFIED`]; `Debug` prints the variant name.
24    #[allow(non_upper_case_globals)]
25    pub const RangeUnspecified: Self = Self::RANGE_UNSPECIFIED;
26    ///Idiomatic alias for [`Self::DAY_1`]; `Debug` prints the variant name.
27    #[allow(non_upper_case_globals)]
28    pub const Day1: Self = Self::DAY_1;
29    ///Idiomatic alias for [`Self::DAY_7`]; `Debug` prints the variant name.
30    #[allow(non_upper_case_globals)]
31    pub const Day7: Self = Self::DAY_7;
32    ///Idiomatic alias for [`Self::DAY_30`]; `Debug` prints the variant name.
33    #[allow(non_upper_case_globals)]
34    pub const Day30: Self = Self::DAY_30;
35    ///Idiomatic alias for [`Self::DAY_90`]; `Debug` prints the variant name.
36    #[allow(non_upper_case_globals)]
37    pub const Day90: Self = Self::DAY_90;
38    ///Idiomatic alias for [`Self::DAY_180`]; `Debug` prints the variant name.
39    #[allow(non_upper_case_globals)]
40    pub const Day180: Self = Self::DAY_180;
41    ///Idiomatic alias for [`Self::DAY_365`]; `Debug` prints the variant name.
42    #[allow(non_upper_case_globals)]
43    pub const Day365: Self = Self::DAY_365;
44}
45impl ::core::default::Default for ChainAnalyticsRange {
46    fn default() -> Self {
47        Self::RANGE_UNSPECIFIED
48    }
49}
50impl ::serde::Serialize for ChainAnalyticsRange {
51    fn serialize<S: ::serde::Serializer>(
52        &self,
53        s: S,
54    ) -> ::core::result::Result<S::Ok, S::Error> {
55        s.serialize_str(::buffa::Enumeration::proto_name(self))
56    }
57}
58impl<'de> ::serde::Deserialize<'de> for ChainAnalyticsRange {
59    fn deserialize<D: ::serde::Deserializer<'de>>(
60        d: D,
61    ) -> ::core::result::Result<Self, D::Error> {
62        struct _V;
63        impl ::serde::de::Visitor<'_> for _V {
64            type Value = ChainAnalyticsRange;
65            fn expecting(
66                &self,
67                f: &mut ::core::fmt::Formatter<'_>,
68            ) -> ::core::fmt::Result {
69                f.write_str(
70                    concat!(
71                        "a string, integer, or null for ",
72                        stringify!(ChainAnalyticsRange)
73                    ),
74                )
75            }
76            fn visit_str<E: ::serde::de::Error>(
77                self,
78                v: &str,
79            ) -> ::core::result::Result<ChainAnalyticsRange, E> {
80                <ChainAnalyticsRange as ::buffa::Enumeration>::from_proto_name(v)
81                    .ok_or_else(|| { ::serde::de::Error::unknown_variant(v, &[]) })
82            }
83            fn visit_i64<E: ::serde::de::Error>(
84                self,
85                v: i64,
86            ) -> ::core::result::Result<ChainAnalyticsRange, E> {
87                let v32 = i32::try_from(v)
88                    .map_err(|_| {
89                        ::serde::de::Error::custom(
90                            ::buffa::alloc::format!("enum value {v} out of i32 range"),
91                        )
92                    })?;
93                <ChainAnalyticsRange as ::buffa::Enumeration>::from_i32(v32)
94                    .ok_or_else(|| {
95                        ::serde::de::Error::custom(
96                            ::buffa::alloc::format!("unknown enum value {v32}"),
97                        )
98                    })
99            }
100            fn visit_u64<E: ::serde::de::Error>(
101                self,
102                v: u64,
103            ) -> ::core::result::Result<ChainAnalyticsRange, E> {
104                let v32 = i32::try_from(v)
105                    .map_err(|_| {
106                        ::serde::de::Error::custom(
107                            ::buffa::alloc::format!("enum value {v} out of i32 range"),
108                        )
109                    })?;
110                <ChainAnalyticsRange as ::buffa::Enumeration>::from_i32(v32)
111                    .ok_or_else(|| {
112                        ::serde::de::Error::custom(
113                            ::buffa::alloc::format!("unknown enum value {v32}"),
114                        )
115                    })
116            }
117            fn visit_unit<E: ::serde::de::Error>(
118                self,
119            ) -> ::core::result::Result<ChainAnalyticsRange, E> {
120                ::core::result::Result::Ok(::core::default::Default::default())
121            }
122        }
123        d.deserialize_any(_V)
124    }
125}
126impl ::buffa::json_helpers::ProtoElemJson for ChainAnalyticsRange {
127    fn serialize_proto_json<S: ::serde::Serializer>(
128        v: &Self,
129        s: S,
130    ) -> ::core::result::Result<S::Ok, S::Error> {
131        ::serde::Serialize::serialize(v, s)
132    }
133    fn deserialize_proto_json<'de, D: ::serde::Deserializer<'de>>(
134        d: D,
135    ) -> ::core::result::Result<Self, D::Error> {
136        <Self as ::serde::Deserialize>::deserialize(d)
137    }
138}
139impl ::buffa::Enumeration for ChainAnalyticsRange {
140    fn from_i32(value: i32) -> ::core::option::Option<Self> {
141        match value {
142            0i32 => ::core::option::Option::Some(Self::RANGE_UNSPECIFIED),
143            1i32 => ::core::option::Option::Some(Self::DAY_1),
144            2i32 => ::core::option::Option::Some(Self::DAY_7),
145            3i32 => ::core::option::Option::Some(Self::DAY_30),
146            4i32 => ::core::option::Option::Some(Self::DAY_90),
147            5i32 => ::core::option::Option::Some(Self::DAY_180),
148            6i32 => ::core::option::Option::Some(Self::DAY_365),
149            _ => ::core::option::Option::None,
150        }
151    }
152    fn to_i32(&self) -> i32 {
153        *self as i32
154    }
155    fn proto_name(&self) -> &'static str {
156        match self {
157            Self::RANGE_UNSPECIFIED => "RANGE_UNSPECIFIED",
158            Self::DAY_1 => "DAY_1",
159            Self::DAY_7 => "DAY_7",
160            Self::DAY_30 => "DAY_30",
161            Self::DAY_90 => "DAY_90",
162            Self::DAY_180 => "DAY_180",
163            Self::DAY_365 => "DAY_365",
164        }
165    }
166    fn from_proto_name(name: &str) -> ::core::option::Option<Self> {
167        match name {
168            "RANGE_UNSPECIFIED" => ::core::option::Option::Some(Self::RANGE_UNSPECIFIED),
169            "DAY_1" => ::core::option::Option::Some(Self::DAY_1),
170            "DAY_7" => ::core::option::Option::Some(Self::DAY_7),
171            "DAY_30" => ::core::option::Option::Some(Self::DAY_30),
172            "DAY_90" => ::core::option::Option::Some(Self::DAY_90),
173            "DAY_180" => ::core::option::Option::Some(Self::DAY_180),
174            "DAY_365" => ::core::option::Option::Some(Self::DAY_365),
175            _ => ::core::option::Option::None,
176        }
177    }
178    fn values() -> &'static [Self] {
179        &[
180            Self::RANGE_UNSPECIFIED,
181            Self::DAY_1,
182            Self::DAY_7,
183            Self::DAY_30,
184            Self::DAY_90,
185            Self::DAY_180,
186            Self::DAY_365,
187        ]
188    }
189}
190/// GetZippedAssetSupplyRequest selects the route-scoped zToken supply series.
191#[derive(Clone, PartialEq, Default)]
192#[derive(::serde::Serialize, ::serde::Deserialize)]
193#[serde(default)]
194pub struct GetZippedAssetSupplyRequest {
195    /// Zipped asset route identifier.
196    ///
197    /// Field 1: `zipped_asset_id`
198    #[serde(
199        rename = "zippedAssetId",
200        alias = "zipped_asset_id",
201        with = "::buffa::json_helpers::uint32",
202        skip_serializing_if = "::buffa::json_helpers::skip_if::is_zero_u32"
203    )]
204    pub zipped_asset_id: u32,
205    /// Standard history window. Defaults to 1 day when unspecified.
206    ///
207    /// Field 2: `range`
208    #[serde(
209        rename = "range",
210        with = "::buffa::json_helpers::proto_enum",
211        skip_serializing_if = "::buffa::json_helpers::skip_if::is_default_enum_value"
212    )]
213    pub range: ::buffa::EnumValue<ChainAnalyticsRange>,
214    /// Optional explicit bucket. Allowed values are 1m, 5m, 10m, 15m, 30m, 1h, 2h, 4h, 8h, 12h, or 1d.
215    /// Valid buckets depend on range to keep chart payloads near 1k points.
216    /// When omitted, the server picks the default bucket for the selected range.
217    ///
218    /// Field 3: `bucket`
219    #[serde(
220        rename = "bucket",
221        with = "::buffa::json_helpers::proto_string",
222        skip_serializing_if = "::buffa::json_helpers::skip_if::is_empty_str"
223    )]
224    pub bucket: ::buffa::alloc::string::String,
225    /// Optional inclusive start timestamp in seconds since Unix epoch.
226    ///
227    /// Field 4: `start_ts_sec`
228    #[serde(
229        rename = "startTsSec",
230        alias = "start_ts_sec",
231        with = "::buffa::json_helpers::uint32",
232        skip_serializing_if = "::buffa::json_helpers::skip_if::is_zero_u32"
233    )]
234    pub start_ts_sec: u32,
235    /// Optional inclusive end timestamp in seconds since Unix epoch.
236    ///
237    /// Field 5: `end_ts_sec`
238    #[serde(
239        rename = "endTsSec",
240        alias = "end_ts_sec",
241        with = "::buffa::json_helpers::uint32",
242        skip_serializing_if = "::buffa::json_helpers::skip_if::is_zero_u32"
243    )]
244    pub end_ts_sec: u32,
245    #[serde(skip)]
246    #[doc(hidden)]
247    pub __buffa_unknown_fields: ::buffa::UnknownFields,
248}
249impl ::core::fmt::Debug for GetZippedAssetSupplyRequest {
250    fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
251        f.debug_struct("GetZippedAssetSupplyRequest")
252            .field("zipped_asset_id", &self.zipped_asset_id)
253            .field("range", &self.range)
254            .field("bucket", &self.bucket)
255            .field("start_ts_sec", &self.start_ts_sec)
256            .field("end_ts_sec", &self.end_ts_sec)
257            .finish()
258    }
259}
260impl GetZippedAssetSupplyRequest {
261    /// Protobuf type URL for this message, for use with `Any::pack` and
262    /// `Any::unpack_if`.
263    ///
264    /// Format: `type.googleapis.com/<fully.qualified.TypeName>`
265    pub const TYPE_URL: &'static str = "type.googleapis.com/chain.analytics.v1.GetZippedAssetSupplyRequest";
266}
267::buffa::impl_default_instance!(GetZippedAssetSupplyRequest);
268impl ::buffa::MessageName for GetZippedAssetSupplyRequest {
269    const PACKAGE: &'static str = "chain.analytics.v1";
270    const NAME: &'static str = "GetZippedAssetSupplyRequest";
271    const FULL_NAME: &'static str = "chain.analytics.v1.GetZippedAssetSupplyRequest";
272    const TYPE_URL: &'static str = "type.googleapis.com/chain.analytics.v1.GetZippedAssetSupplyRequest";
273}
274impl ::buffa::Message for GetZippedAssetSupplyRequest {
275    /// Returns the total encoded size in bytes.
276    ///
277    /// The result is a `u32`; the protobuf specification requires all
278    /// messages to fit within 2 GiB (2,147,483,647 bytes), so a
279    /// compliant message will never overflow this type.
280    #[allow(clippy::let_and_return)]
281    fn compute_size(&self, _cache: &mut ::buffa::SizeCache) -> u32 {
282        #[allow(unused_imports)]
283        use ::buffa::Enumeration as _;
284        let mut size = 0u32;
285        if self.zipped_asset_id != 0u32 {
286            size
287                += 1u32
288                    + ::buffa::types::uint32_encoded_len(self.zipped_asset_id) as u32;
289        }
290        {
291            let val = self.range.to_i32();
292            if val != 0 {
293                size += 1u32 + ::buffa::types::int32_encoded_len(val) as u32;
294            }
295        }
296        if !self.bucket.is_empty() {
297            size += 1u32 + ::buffa::types::string_encoded_len(&self.bucket) as u32;
298        }
299        if self.start_ts_sec != 0u32 {
300            size += 1u32 + ::buffa::types::FIXED32_ENCODED_LEN as u32;
301        }
302        if self.end_ts_sec != 0u32 {
303            size += 1u32 + ::buffa::types::FIXED32_ENCODED_LEN as u32;
304        }
305        size += self.__buffa_unknown_fields.encoded_len() as u32;
306        size
307    }
308    fn write_to(
309        &self,
310        _cache: &mut ::buffa::SizeCache,
311        buf: &mut impl ::buffa::bytes::BufMut,
312    ) {
313        #[allow(unused_imports)]
314        use ::buffa::Enumeration as _;
315        if self.zipped_asset_id != 0u32 {
316            ::buffa::types::put_uint32_field(1u32, self.zipped_asset_id, buf);
317        }
318        {
319            let val = self.range.to_i32();
320            if val != 0 {
321                ::buffa::types::put_int32_field(2u32, val, buf);
322            }
323        }
324        if !self.bucket.is_empty() {
325            ::buffa::types::put_string_field(3u32, &self.bucket, buf);
326        }
327        if self.start_ts_sec != 0u32 {
328            ::buffa::types::put_fixed32_field(4u32, self.start_ts_sec, buf);
329        }
330        if self.end_ts_sec != 0u32 {
331            ::buffa::types::put_fixed32_field(5u32, self.end_ts_sec, buf);
332        }
333        self.__buffa_unknown_fields.write_to(buf);
334    }
335    fn merge_field(
336        &mut self,
337        tag: ::buffa::encoding::Tag,
338        buf: &mut impl ::buffa::bytes::Buf,
339        ctx: ::buffa::DecodeContext<'_>,
340    ) -> ::core::result::Result<(), ::buffa::DecodeError> {
341        #[allow(unused_imports)]
342        use ::buffa::bytes::Buf as _;
343        #[allow(unused_imports)]
344        use ::buffa::Enumeration as _;
345        match tag.field_number() {
346            1u32 => {
347                ::buffa::encoding::check_wire_type(
348                    tag,
349                    ::buffa::encoding::WireType::Varint,
350                )?;
351                self.zipped_asset_id = ::buffa::types::decode_uint32(buf)?;
352            }
353            2u32 => {
354                ::buffa::encoding::check_wire_type(
355                    tag,
356                    ::buffa::encoding::WireType::Varint,
357                )?;
358                self.range = ::buffa::EnumValue::from(
359                    ::buffa::types::decode_int32(buf)?,
360                );
361            }
362            3u32 => {
363                ::buffa::encoding::check_wire_type(
364                    tag,
365                    ::buffa::encoding::WireType::LengthDelimited,
366                )?;
367                ::buffa::types::merge_string(&mut self.bucket, buf)?;
368            }
369            4u32 => {
370                ::buffa::encoding::check_wire_type(
371                    tag,
372                    ::buffa::encoding::WireType::Fixed32,
373                )?;
374                self.start_ts_sec = ::buffa::types::decode_fixed32(buf)?;
375            }
376            5u32 => {
377                ::buffa::encoding::check_wire_type(
378                    tag,
379                    ::buffa::encoding::WireType::Fixed32,
380                )?;
381                self.end_ts_sec = ::buffa::types::decode_fixed32(buf)?;
382            }
383            _ => {
384                self.__buffa_unknown_fields
385                    .push(::buffa::encoding::decode_unknown_field(tag, buf, ctx)?);
386            }
387        }
388        ::core::result::Result::Ok(())
389    }
390    fn clear(&mut self) {
391        self.zipped_asset_id = 0u32;
392        self.range = ::buffa::EnumValue::from(0);
393        self.bucket.clear();
394        self.start_ts_sec = 0u32;
395        self.end_ts_sec = 0u32;
396        self.__buffa_unknown_fields.clear();
397    }
398}
399impl ::buffa::ExtensionSet for GetZippedAssetSupplyRequest {
400    const PROTO_FQN: &'static str = "chain.analytics.v1.GetZippedAssetSupplyRequest";
401    fn unknown_fields(&self) -> &::buffa::UnknownFields {
402        &self.__buffa_unknown_fields
403    }
404    fn unknown_fields_mut(&mut self) -> &mut ::buffa::UnknownFields {
405        &mut self.__buffa_unknown_fields
406    }
407}
408impl ::buffa::json_helpers::ProtoElemJson for GetZippedAssetSupplyRequest {
409    fn serialize_proto_json<S: ::serde::Serializer>(
410        v: &Self,
411        s: S,
412    ) -> ::core::result::Result<S::Ok, S::Error> {
413        ::serde::Serialize::serialize(v, s)
414    }
415    fn deserialize_proto_json<'de, D: ::serde::Deserializer<'de>>(
416        d: D,
417    ) -> ::core::result::Result<Self, D::Error> {
418        <Self as ::serde::Deserialize>::deserialize(d)
419    }
420}
421#[doc(hidden)]
422pub const __GET_ZIPPED_ASSET_SUPPLY_REQUEST_JSON_ANY: ::buffa::type_registry::JsonAnyEntry = ::buffa::type_registry::JsonAnyEntry {
423    type_url: "type.googleapis.com/chain.analytics.v1.GetZippedAssetSupplyRequest",
424    to_json: ::buffa::type_registry::any_to_json::<GetZippedAssetSupplyRequest>,
425    from_json: ::buffa::type_registry::any_from_json::<GetZippedAssetSupplyRequest>,
426    is_wkt: false,
427};
428/// GetZippedAssetSupplyResponse returns zipped asset supply chart columns.
429#[derive(Clone, PartialEq, Default)]
430#[derive(::serde::Serialize, ::serde::Deserialize)]
431#[serde(default)]
432pub struct GetZippedAssetSupplyResponse {
433    /// Zipped asset route identifier.
434    ///
435    /// Field 1: `zipped_asset_id`
436    #[serde(
437        rename = "zippedAssetId",
438        alias = "zipped_asset_id",
439        with = "::buffa::json_helpers::uint32",
440        skip_serializing_if = "::buffa::json_helpers::skip_if::is_zero_u32"
441    )]
442    pub zipped_asset_id: u32,
443    /// Resolved history window.
444    ///
445    /// Field 2: `range`
446    #[serde(
447        rename = "range",
448        with = "::buffa::json_helpers::proto_enum",
449        skip_serializing_if = "::buffa::json_helpers::skip_if::is_default_enum_value"
450    )]
451    pub range: ::buffa::EnumValue<ChainAnalyticsRange>,
452    /// Resolved bucket duration.
453    ///
454    /// Field 3: `bucket`
455    #[serde(
456        rename = "bucket",
457        with = "::buffa::json_helpers::proto_string",
458        skip_serializing_if = "::buffa::json_helpers::skip_if::is_empty_str"
459    )]
460    pub bucket: ::buffa::alloc::string::String,
461    /// First bucket timestamp in seconds since Unix epoch.
462    ///
463    /// Field 4: `start_ts_sec`
464    #[serde(
465        rename = "startTsSec",
466        alias = "start_ts_sec",
467        with = "::buffa::json_helpers::uint32",
468        skip_serializing_if = "::buffa::json_helpers::skip_if::is_zero_u32"
469    )]
470    pub start_ts_sec: u32,
471    /// Last bucket timestamp in seconds since Unix epoch.
472    ///
473    /// Field 5: `end_ts_sec`
474    #[serde(
475        rename = "endTsSec",
476        alias = "end_ts_sec",
477        with = "::buffa::json_helpers::uint32",
478        skip_serializing_if = "::buffa::json_helpers::skip_if::is_zero_u32"
479    )]
480    pub end_ts_sec: u32,
481    /// Number of buckets represented by each value column.
482    ///
483    /// Field 6: `points`
484    #[serde(
485        rename = "points",
486        with = "::buffa::json_helpers::uint32",
487        skip_serializing_if = "::buffa::json_helpers::skip_if::is_zero_u32"
488    )]
489    pub points: u32,
490    /// Total zToken supply per bucket scaled by the unified asset's
491    /// AssetConfig.quantity_scale from SpotConfig for this zipped asset.
492    /// Decode: total_supply_q / 10^quantity_scale.
493    ///
494    /// Field 7: `total_supply_q`
495    #[serde(
496        rename = "totalSupplyQ",
497        alias = "total_supply_q",
498        with = "::buffa::json_helpers::proto_seq",
499        skip_serializing_if = "::buffa::json_helpers::skip_if::is_empty_vec"
500    )]
501    pub total_supply_q: ::buffa::alloc::vec::Vec<u64>,
502    #[serde(skip)]
503    #[doc(hidden)]
504    pub __buffa_unknown_fields: ::buffa::UnknownFields,
505}
506impl ::core::fmt::Debug for GetZippedAssetSupplyResponse {
507    fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
508        f.debug_struct("GetZippedAssetSupplyResponse")
509            .field("zipped_asset_id", &self.zipped_asset_id)
510            .field("range", &self.range)
511            .field("bucket", &self.bucket)
512            .field("start_ts_sec", &self.start_ts_sec)
513            .field("end_ts_sec", &self.end_ts_sec)
514            .field("points", &self.points)
515            .field("total_supply_q", &self.total_supply_q)
516            .finish()
517    }
518}
519impl GetZippedAssetSupplyResponse {
520    /// Protobuf type URL for this message, for use with `Any::pack` and
521    /// `Any::unpack_if`.
522    ///
523    /// Format: `type.googleapis.com/<fully.qualified.TypeName>`
524    pub const TYPE_URL: &'static str = "type.googleapis.com/chain.analytics.v1.GetZippedAssetSupplyResponse";
525}
526::buffa::impl_default_instance!(GetZippedAssetSupplyResponse);
527impl ::buffa::MessageName for GetZippedAssetSupplyResponse {
528    const PACKAGE: &'static str = "chain.analytics.v1";
529    const NAME: &'static str = "GetZippedAssetSupplyResponse";
530    const FULL_NAME: &'static str = "chain.analytics.v1.GetZippedAssetSupplyResponse";
531    const TYPE_URL: &'static str = "type.googleapis.com/chain.analytics.v1.GetZippedAssetSupplyResponse";
532}
533impl ::buffa::Message for GetZippedAssetSupplyResponse {
534    /// Returns the total encoded size in bytes.
535    ///
536    /// The result is a `u32`; the protobuf specification requires all
537    /// messages to fit within 2 GiB (2,147,483,647 bytes), so a
538    /// compliant message will never overflow this type.
539    #[allow(clippy::let_and_return)]
540    fn compute_size(&self, _cache: &mut ::buffa::SizeCache) -> u32 {
541        #[allow(unused_imports)]
542        use ::buffa::Enumeration as _;
543        let mut size = 0u32;
544        if self.zipped_asset_id != 0u32 {
545            size
546                += 1u32
547                    + ::buffa::types::uint32_encoded_len(self.zipped_asset_id) as u32;
548        }
549        {
550            let val = self.range.to_i32();
551            if val != 0 {
552                size += 1u32 + ::buffa::types::int32_encoded_len(val) as u32;
553            }
554        }
555        if !self.bucket.is_empty() {
556            size += 1u32 + ::buffa::types::string_encoded_len(&self.bucket) as u32;
557        }
558        if self.start_ts_sec != 0u32 {
559            size += 1u32 + ::buffa::types::FIXED32_ENCODED_LEN as u32;
560        }
561        if self.end_ts_sec != 0u32 {
562            size += 1u32 + ::buffa::types::FIXED32_ENCODED_LEN as u32;
563        }
564        if self.points != 0u32 {
565            size += 1u32 + ::buffa::types::uint32_encoded_len(self.points) as u32;
566        }
567        if !self.total_supply_q.is_empty() {
568            let payload: u32 = self
569                .total_supply_q
570                .iter()
571                .map(|&v| ::buffa::types::uint64_encoded_len(v) as u32)
572                .sum::<u32>();
573            size
574                += 1u32 + ::buffa::encoding::varint_len(payload as u64) as u32 + payload;
575        }
576        size += self.__buffa_unknown_fields.encoded_len() as u32;
577        size
578    }
579    fn write_to(
580        &self,
581        _cache: &mut ::buffa::SizeCache,
582        buf: &mut impl ::buffa::bytes::BufMut,
583    ) {
584        #[allow(unused_imports)]
585        use ::buffa::Enumeration as _;
586        if self.zipped_asset_id != 0u32 {
587            ::buffa::types::put_uint32_field(1u32, self.zipped_asset_id, buf);
588        }
589        {
590            let val = self.range.to_i32();
591            if val != 0 {
592                ::buffa::types::put_int32_field(2u32, val, buf);
593            }
594        }
595        if !self.bucket.is_empty() {
596            ::buffa::types::put_string_field(3u32, &self.bucket, buf);
597        }
598        if self.start_ts_sec != 0u32 {
599            ::buffa::types::put_fixed32_field(4u32, self.start_ts_sec, buf);
600        }
601        if self.end_ts_sec != 0u32 {
602            ::buffa::types::put_fixed32_field(5u32, self.end_ts_sec, buf);
603        }
604        if self.points != 0u32 {
605            ::buffa::types::put_uint32_field(6u32, self.points, buf);
606        }
607        if !self.total_supply_q.is_empty() {
608            let payload: u32 = self
609                .total_supply_q
610                .iter()
611                .map(|&v| ::buffa::types::uint64_encoded_len(v) as u32)
612                .sum::<u32>();
613            ::buffa::types::put_len_delimited_header(7u32, payload, buf);
614            for &v in &self.total_supply_q {
615                ::buffa::types::encode_uint64(v, buf);
616            }
617        }
618        self.__buffa_unknown_fields.write_to(buf);
619    }
620    fn merge_field(
621        &mut self,
622        tag: ::buffa::encoding::Tag,
623        buf: &mut impl ::buffa::bytes::Buf,
624        ctx: ::buffa::DecodeContext<'_>,
625    ) -> ::core::result::Result<(), ::buffa::DecodeError> {
626        #[allow(unused_imports)]
627        use ::buffa::bytes::Buf as _;
628        #[allow(unused_imports)]
629        use ::buffa::Enumeration as _;
630        match tag.field_number() {
631            1u32 => {
632                ::buffa::encoding::check_wire_type(
633                    tag,
634                    ::buffa::encoding::WireType::Varint,
635                )?;
636                self.zipped_asset_id = ::buffa::types::decode_uint32(buf)?;
637            }
638            2u32 => {
639                ::buffa::encoding::check_wire_type(
640                    tag,
641                    ::buffa::encoding::WireType::Varint,
642                )?;
643                self.range = ::buffa::EnumValue::from(
644                    ::buffa::types::decode_int32(buf)?,
645                );
646            }
647            3u32 => {
648                ::buffa::encoding::check_wire_type(
649                    tag,
650                    ::buffa::encoding::WireType::LengthDelimited,
651                )?;
652                ::buffa::types::merge_string(&mut self.bucket, buf)?;
653            }
654            4u32 => {
655                ::buffa::encoding::check_wire_type(
656                    tag,
657                    ::buffa::encoding::WireType::Fixed32,
658                )?;
659                self.start_ts_sec = ::buffa::types::decode_fixed32(buf)?;
660            }
661            5u32 => {
662                ::buffa::encoding::check_wire_type(
663                    tag,
664                    ::buffa::encoding::WireType::Fixed32,
665                )?;
666                self.end_ts_sec = ::buffa::types::decode_fixed32(buf)?;
667            }
668            6u32 => {
669                ::buffa::encoding::check_wire_type(
670                    tag,
671                    ::buffa::encoding::WireType::Varint,
672                )?;
673                self.points = ::buffa::types::decode_uint32(buf)?;
674            }
675            7u32 => {
676                if tag.wire_type() == ::buffa::encoding::WireType::LengthDelimited {
677                    let len = ::buffa::encoding::decode_varint(buf)?;
678                    let len = usize::try_from(len)
679                        .map_err(|_| ::buffa::DecodeError::MessageTooLarge)?;
680                    if buf.remaining() < len {
681                        return ::core::result::Result::Err(
682                            ::buffa::DecodeError::UnexpectedEof,
683                        );
684                    }
685                    self.total_supply_q.reserve(len);
686                    let mut limited = buf.take(len);
687                    while limited.has_remaining() {
688                        self.total_supply_q
689                            .push(::buffa::types::decode_uint64(&mut limited)?);
690                    }
691                    let leftover = limited.remaining();
692                    if leftover > 0 {
693                        limited.advance(leftover);
694                    }
695                } else if tag.wire_type() == ::buffa::encoding::WireType::Varint {
696                    self.total_supply_q.push(::buffa::types::decode_uint64(buf)?);
697                } else {
698                    return ::core::result::Result::Err(
699                        ::buffa::encoding::wire_type_mismatch(
700                            tag,
701                            ::buffa::encoding::WireType::LengthDelimited,
702                        ),
703                    );
704                }
705            }
706            _ => {
707                self.__buffa_unknown_fields
708                    .push(::buffa::encoding::decode_unknown_field(tag, buf, ctx)?);
709            }
710        }
711        ::core::result::Result::Ok(())
712    }
713    fn clear(&mut self) {
714        self.zipped_asset_id = 0u32;
715        self.range = ::buffa::EnumValue::from(0);
716        self.bucket.clear();
717        self.start_ts_sec = 0u32;
718        self.end_ts_sec = 0u32;
719        self.points = 0u32;
720        self.total_supply_q.clear();
721        self.__buffa_unknown_fields.clear();
722    }
723}
724impl ::buffa::ExtensionSet for GetZippedAssetSupplyResponse {
725    const PROTO_FQN: &'static str = "chain.analytics.v1.GetZippedAssetSupplyResponse";
726    fn unknown_fields(&self) -> &::buffa::UnknownFields {
727        &self.__buffa_unknown_fields
728    }
729    fn unknown_fields_mut(&mut self) -> &mut ::buffa::UnknownFields {
730        &mut self.__buffa_unknown_fields
731    }
732}
733impl ::buffa::json_helpers::ProtoElemJson for GetZippedAssetSupplyResponse {
734    fn serialize_proto_json<S: ::serde::Serializer>(
735        v: &Self,
736        s: S,
737    ) -> ::core::result::Result<S::Ok, S::Error> {
738        ::serde::Serialize::serialize(v, s)
739    }
740    fn deserialize_proto_json<'de, D: ::serde::Deserializer<'de>>(
741        d: D,
742    ) -> ::core::result::Result<Self, D::Error> {
743        <Self as ::serde::Deserialize>::deserialize(d)
744    }
745}
746#[doc(hidden)]
747pub const __GET_ZIPPED_ASSET_SUPPLY_RESPONSE_JSON_ANY: ::buffa::type_registry::JsonAnyEntry = ::buffa::type_registry::JsonAnyEntry {
748    type_url: "type.googleapis.com/chain.analytics.v1.GetZippedAssetSupplyResponse",
749    to_json: ::buffa::type_registry::any_to_json::<GetZippedAssetSupplyResponse>,
750    from_json: ::buffa::type_registry::any_from_json::<GetZippedAssetSupplyResponse>,
751    is_wkt: false,
752};
753/// ZippedAssetSupplySeries is one zipped asset supply column in a grouped chart.
754#[derive(Clone, PartialEq, Default)]
755#[derive(::serde::Serialize, ::serde::Deserialize)]
756#[serde(default)]
757pub struct ZippedAssetSupplySeries {
758    /// Zipped asset route identifier.
759    ///
760    /// Field 1: `zipped_asset_id`
761    #[serde(
762        rename = "zippedAssetId",
763        alias = "zipped_asset_id",
764        with = "::buffa::json_helpers::uint32",
765        skip_serializing_if = "::buffa::json_helpers::skip_if::is_zero_u32"
766    )]
767    pub zipped_asset_id: u32,
768    /// Total zToken supply per bucket scaled by the unified asset's
769    /// AssetConfig.quantity_scale from SpotConfig for this zipped asset.
770    /// Decode: total_supply_q / 10^quantity_scale.
771    ///
772    /// Field 2: `total_supply_q`
773    #[serde(
774        rename = "totalSupplyQ",
775        alias = "total_supply_q",
776        with = "::buffa::json_helpers::proto_seq",
777        skip_serializing_if = "::buffa::json_helpers::skip_if::is_empty_vec"
778    )]
779    pub total_supply_q: ::buffa::alloc::vec::Vec<u64>,
780    #[serde(skip)]
781    #[doc(hidden)]
782    pub __buffa_unknown_fields: ::buffa::UnknownFields,
783}
784impl ::core::fmt::Debug for ZippedAssetSupplySeries {
785    fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
786        f.debug_struct("ZippedAssetSupplySeries")
787            .field("zipped_asset_id", &self.zipped_asset_id)
788            .field("total_supply_q", &self.total_supply_q)
789            .finish()
790    }
791}
792impl ZippedAssetSupplySeries {
793    /// Protobuf type URL for this message, for use with `Any::pack` and
794    /// `Any::unpack_if`.
795    ///
796    /// Format: `type.googleapis.com/<fully.qualified.TypeName>`
797    pub const TYPE_URL: &'static str = "type.googleapis.com/chain.analytics.v1.ZippedAssetSupplySeries";
798}
799::buffa::impl_default_instance!(ZippedAssetSupplySeries);
800impl ::buffa::MessageName for ZippedAssetSupplySeries {
801    const PACKAGE: &'static str = "chain.analytics.v1";
802    const NAME: &'static str = "ZippedAssetSupplySeries";
803    const FULL_NAME: &'static str = "chain.analytics.v1.ZippedAssetSupplySeries";
804    const TYPE_URL: &'static str = "type.googleapis.com/chain.analytics.v1.ZippedAssetSupplySeries";
805}
806impl ::buffa::Message for ZippedAssetSupplySeries {
807    /// Returns the total encoded size in bytes.
808    ///
809    /// The result is a `u32`; the protobuf specification requires all
810    /// messages to fit within 2 GiB (2,147,483,647 bytes), so a
811    /// compliant message will never overflow this type.
812    #[allow(clippy::let_and_return)]
813    fn compute_size(&self, _cache: &mut ::buffa::SizeCache) -> u32 {
814        #[allow(unused_imports)]
815        use ::buffa::Enumeration as _;
816        let mut size = 0u32;
817        if self.zipped_asset_id != 0u32 {
818            size
819                += 1u32
820                    + ::buffa::types::uint32_encoded_len(self.zipped_asset_id) as u32;
821        }
822        if !self.total_supply_q.is_empty() {
823            let payload: u32 = self
824                .total_supply_q
825                .iter()
826                .map(|&v| ::buffa::types::uint64_encoded_len(v) as u32)
827                .sum::<u32>();
828            size
829                += 1u32 + ::buffa::encoding::varint_len(payload as u64) as u32 + payload;
830        }
831        size += self.__buffa_unknown_fields.encoded_len() as u32;
832        size
833    }
834    fn write_to(
835        &self,
836        _cache: &mut ::buffa::SizeCache,
837        buf: &mut impl ::buffa::bytes::BufMut,
838    ) {
839        #[allow(unused_imports)]
840        use ::buffa::Enumeration as _;
841        if self.zipped_asset_id != 0u32 {
842            ::buffa::types::put_uint32_field(1u32, self.zipped_asset_id, buf);
843        }
844        if !self.total_supply_q.is_empty() {
845            let payload: u32 = self
846                .total_supply_q
847                .iter()
848                .map(|&v| ::buffa::types::uint64_encoded_len(v) as u32)
849                .sum::<u32>();
850            ::buffa::types::put_len_delimited_header(2u32, payload, buf);
851            for &v in &self.total_supply_q {
852                ::buffa::types::encode_uint64(v, buf);
853            }
854        }
855        self.__buffa_unknown_fields.write_to(buf);
856    }
857    fn merge_field(
858        &mut self,
859        tag: ::buffa::encoding::Tag,
860        buf: &mut impl ::buffa::bytes::Buf,
861        ctx: ::buffa::DecodeContext<'_>,
862    ) -> ::core::result::Result<(), ::buffa::DecodeError> {
863        #[allow(unused_imports)]
864        use ::buffa::bytes::Buf as _;
865        #[allow(unused_imports)]
866        use ::buffa::Enumeration as _;
867        match tag.field_number() {
868            1u32 => {
869                ::buffa::encoding::check_wire_type(
870                    tag,
871                    ::buffa::encoding::WireType::Varint,
872                )?;
873                self.zipped_asset_id = ::buffa::types::decode_uint32(buf)?;
874            }
875            2u32 => {
876                if tag.wire_type() == ::buffa::encoding::WireType::LengthDelimited {
877                    let len = ::buffa::encoding::decode_varint(buf)?;
878                    let len = usize::try_from(len)
879                        .map_err(|_| ::buffa::DecodeError::MessageTooLarge)?;
880                    if buf.remaining() < len {
881                        return ::core::result::Result::Err(
882                            ::buffa::DecodeError::UnexpectedEof,
883                        );
884                    }
885                    self.total_supply_q.reserve(len);
886                    let mut limited = buf.take(len);
887                    while limited.has_remaining() {
888                        self.total_supply_q
889                            .push(::buffa::types::decode_uint64(&mut limited)?);
890                    }
891                    let leftover = limited.remaining();
892                    if leftover > 0 {
893                        limited.advance(leftover);
894                    }
895                } else if tag.wire_type() == ::buffa::encoding::WireType::Varint {
896                    self.total_supply_q.push(::buffa::types::decode_uint64(buf)?);
897                } else {
898                    return ::core::result::Result::Err(
899                        ::buffa::encoding::wire_type_mismatch(
900                            tag,
901                            ::buffa::encoding::WireType::LengthDelimited,
902                        ),
903                    );
904                }
905            }
906            _ => {
907                self.__buffa_unknown_fields
908                    .push(::buffa::encoding::decode_unknown_field(tag, buf, ctx)?);
909            }
910        }
911        ::core::result::Result::Ok(())
912    }
913    fn clear(&mut self) {
914        self.zipped_asset_id = 0u32;
915        self.total_supply_q.clear();
916        self.__buffa_unknown_fields.clear();
917    }
918}
919impl ::buffa::ExtensionSet for ZippedAssetSupplySeries {
920    const PROTO_FQN: &'static str = "chain.analytics.v1.ZippedAssetSupplySeries";
921    fn unknown_fields(&self) -> &::buffa::UnknownFields {
922        &self.__buffa_unknown_fields
923    }
924    fn unknown_fields_mut(&mut self) -> &mut ::buffa::UnknownFields {
925        &mut self.__buffa_unknown_fields
926    }
927}
928impl ::buffa::json_helpers::ProtoElemJson for ZippedAssetSupplySeries {
929    fn serialize_proto_json<S: ::serde::Serializer>(
930        v: &Self,
931        s: S,
932    ) -> ::core::result::Result<S::Ok, S::Error> {
933        ::serde::Serialize::serialize(v, s)
934    }
935    fn deserialize_proto_json<'de, D: ::serde::Deserializer<'de>>(
936        d: D,
937    ) -> ::core::result::Result<Self, D::Error> {
938        <Self as ::serde::Deserialize>::deserialize(d)
939    }
940}
941#[doc(hidden)]
942pub const __ZIPPED_ASSET_SUPPLY_SERIES_JSON_ANY: ::buffa::type_registry::JsonAnyEntry = ::buffa::type_registry::JsonAnyEntry {
943    type_url: "type.googleapis.com/chain.analytics.v1.ZippedAssetSupplySeries",
944    to_json: ::buffa::type_registry::any_to_json::<ZippedAssetSupplySeries>,
945    from_json: ::buffa::type_registry::any_from_json::<ZippedAssetSupplySeries>,
946    is_wkt: false,
947};
948/// GetZippedAssetSupplyGroupRequest selects all zipped asset routes in one asset group.
949#[derive(Clone, PartialEq, Default)]
950#[derive(::serde::Serialize, ::serde::Deserialize)]
951#[serde(default)]
952pub struct GetZippedAssetSupplyGroupRequest {
953    /// Zipped asset group identifier.
954    ///
955    /// Field 1: `group_id`
956    #[serde(
957        rename = "groupId",
958        alias = "group_id",
959        with = "::buffa::json_helpers::proto_string",
960        skip_serializing_if = "::buffa::json_helpers::skip_if::is_empty_str"
961    )]
962    pub group_id: ::buffa::alloc::string::String,
963    /// Standard history window. Defaults to 1 day when unspecified.
964    ///
965    /// Field 2: `range`
966    #[serde(
967        rename = "range",
968        with = "::buffa::json_helpers::proto_enum",
969        skip_serializing_if = "::buffa::json_helpers::skip_if::is_default_enum_value"
970    )]
971    pub range: ::buffa::EnumValue<ChainAnalyticsRange>,
972    /// Optional explicit bucket. Allowed values are 1m, 5m, 10m, 15m, 30m, 1h, 2h, 4h, 8h, 12h, or 1d.
973    /// Valid buckets depend on range to keep chart payloads near 1k points.
974    /// When omitted, the server picks the default bucket for the selected range.
975    ///
976    /// Field 3: `bucket`
977    #[serde(
978        rename = "bucket",
979        with = "::buffa::json_helpers::proto_string",
980        skip_serializing_if = "::buffa::json_helpers::skip_if::is_empty_str"
981    )]
982    pub bucket: ::buffa::alloc::string::String,
983    /// Optional inclusive start timestamp in seconds since Unix epoch.
984    ///
985    /// Field 4: `start_ts_sec`
986    #[serde(
987        rename = "startTsSec",
988        alias = "start_ts_sec",
989        with = "::buffa::json_helpers::uint32",
990        skip_serializing_if = "::buffa::json_helpers::skip_if::is_zero_u32"
991    )]
992    pub start_ts_sec: u32,
993    /// Optional inclusive end timestamp in seconds since Unix epoch.
994    ///
995    /// Field 5: `end_ts_sec`
996    #[serde(
997        rename = "endTsSec",
998        alias = "end_ts_sec",
999        with = "::buffa::json_helpers::uint32",
1000        skip_serializing_if = "::buffa::json_helpers::skip_if::is_zero_u32"
1001    )]
1002    pub end_ts_sec: u32,
1003    #[serde(skip)]
1004    #[doc(hidden)]
1005    pub __buffa_unknown_fields: ::buffa::UnknownFields,
1006}
1007impl ::core::fmt::Debug for GetZippedAssetSupplyGroupRequest {
1008    fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
1009        f.debug_struct("GetZippedAssetSupplyGroupRequest")
1010            .field("group_id", &self.group_id)
1011            .field("range", &self.range)
1012            .field("bucket", &self.bucket)
1013            .field("start_ts_sec", &self.start_ts_sec)
1014            .field("end_ts_sec", &self.end_ts_sec)
1015            .finish()
1016    }
1017}
1018impl GetZippedAssetSupplyGroupRequest {
1019    /// Protobuf type URL for this message, for use with `Any::pack` and
1020    /// `Any::unpack_if`.
1021    ///
1022    /// Format: `type.googleapis.com/<fully.qualified.TypeName>`
1023    pub const TYPE_URL: &'static str = "type.googleapis.com/chain.analytics.v1.GetZippedAssetSupplyGroupRequest";
1024}
1025::buffa::impl_default_instance!(GetZippedAssetSupplyGroupRequest);
1026impl ::buffa::MessageName for GetZippedAssetSupplyGroupRequest {
1027    const PACKAGE: &'static str = "chain.analytics.v1";
1028    const NAME: &'static str = "GetZippedAssetSupplyGroupRequest";
1029    const FULL_NAME: &'static str = "chain.analytics.v1.GetZippedAssetSupplyGroupRequest";
1030    const TYPE_URL: &'static str = "type.googleapis.com/chain.analytics.v1.GetZippedAssetSupplyGroupRequest";
1031}
1032impl ::buffa::Message for GetZippedAssetSupplyGroupRequest {
1033    /// Returns the total encoded size in bytes.
1034    ///
1035    /// The result is a `u32`; the protobuf specification requires all
1036    /// messages to fit within 2 GiB (2,147,483,647 bytes), so a
1037    /// compliant message will never overflow this type.
1038    #[allow(clippy::let_and_return)]
1039    fn compute_size(&self, _cache: &mut ::buffa::SizeCache) -> u32 {
1040        #[allow(unused_imports)]
1041        use ::buffa::Enumeration as _;
1042        let mut size = 0u32;
1043        if !self.group_id.is_empty() {
1044            size += 1u32 + ::buffa::types::string_encoded_len(&self.group_id) as u32;
1045        }
1046        {
1047            let val = self.range.to_i32();
1048            if val != 0 {
1049                size += 1u32 + ::buffa::types::int32_encoded_len(val) as u32;
1050            }
1051        }
1052        if !self.bucket.is_empty() {
1053            size += 1u32 + ::buffa::types::string_encoded_len(&self.bucket) as u32;
1054        }
1055        if self.start_ts_sec != 0u32 {
1056            size += 1u32 + ::buffa::types::FIXED32_ENCODED_LEN as u32;
1057        }
1058        if self.end_ts_sec != 0u32 {
1059            size += 1u32 + ::buffa::types::FIXED32_ENCODED_LEN as u32;
1060        }
1061        size += self.__buffa_unknown_fields.encoded_len() as u32;
1062        size
1063    }
1064    fn write_to(
1065        &self,
1066        _cache: &mut ::buffa::SizeCache,
1067        buf: &mut impl ::buffa::bytes::BufMut,
1068    ) {
1069        #[allow(unused_imports)]
1070        use ::buffa::Enumeration as _;
1071        if !self.group_id.is_empty() {
1072            ::buffa::types::put_string_field(1u32, &self.group_id, buf);
1073        }
1074        {
1075            let val = self.range.to_i32();
1076            if val != 0 {
1077                ::buffa::types::put_int32_field(2u32, val, buf);
1078            }
1079        }
1080        if !self.bucket.is_empty() {
1081            ::buffa::types::put_string_field(3u32, &self.bucket, buf);
1082        }
1083        if self.start_ts_sec != 0u32 {
1084            ::buffa::types::put_fixed32_field(4u32, self.start_ts_sec, buf);
1085        }
1086        if self.end_ts_sec != 0u32 {
1087            ::buffa::types::put_fixed32_field(5u32, self.end_ts_sec, buf);
1088        }
1089        self.__buffa_unknown_fields.write_to(buf);
1090    }
1091    fn merge_field(
1092        &mut self,
1093        tag: ::buffa::encoding::Tag,
1094        buf: &mut impl ::buffa::bytes::Buf,
1095        ctx: ::buffa::DecodeContext<'_>,
1096    ) -> ::core::result::Result<(), ::buffa::DecodeError> {
1097        #[allow(unused_imports)]
1098        use ::buffa::bytes::Buf as _;
1099        #[allow(unused_imports)]
1100        use ::buffa::Enumeration as _;
1101        match tag.field_number() {
1102            1u32 => {
1103                ::buffa::encoding::check_wire_type(
1104                    tag,
1105                    ::buffa::encoding::WireType::LengthDelimited,
1106                )?;
1107                ::buffa::types::merge_string(&mut self.group_id, buf)?;
1108            }
1109            2u32 => {
1110                ::buffa::encoding::check_wire_type(
1111                    tag,
1112                    ::buffa::encoding::WireType::Varint,
1113                )?;
1114                self.range = ::buffa::EnumValue::from(
1115                    ::buffa::types::decode_int32(buf)?,
1116                );
1117            }
1118            3u32 => {
1119                ::buffa::encoding::check_wire_type(
1120                    tag,
1121                    ::buffa::encoding::WireType::LengthDelimited,
1122                )?;
1123                ::buffa::types::merge_string(&mut self.bucket, buf)?;
1124            }
1125            4u32 => {
1126                ::buffa::encoding::check_wire_type(
1127                    tag,
1128                    ::buffa::encoding::WireType::Fixed32,
1129                )?;
1130                self.start_ts_sec = ::buffa::types::decode_fixed32(buf)?;
1131            }
1132            5u32 => {
1133                ::buffa::encoding::check_wire_type(
1134                    tag,
1135                    ::buffa::encoding::WireType::Fixed32,
1136                )?;
1137                self.end_ts_sec = ::buffa::types::decode_fixed32(buf)?;
1138            }
1139            _ => {
1140                self.__buffa_unknown_fields
1141                    .push(::buffa::encoding::decode_unknown_field(tag, buf, ctx)?);
1142            }
1143        }
1144        ::core::result::Result::Ok(())
1145    }
1146    fn clear(&mut self) {
1147        self.group_id.clear();
1148        self.range = ::buffa::EnumValue::from(0);
1149        self.bucket.clear();
1150        self.start_ts_sec = 0u32;
1151        self.end_ts_sec = 0u32;
1152        self.__buffa_unknown_fields.clear();
1153    }
1154}
1155impl ::buffa::ExtensionSet for GetZippedAssetSupplyGroupRequest {
1156    const PROTO_FQN: &'static str = "chain.analytics.v1.GetZippedAssetSupplyGroupRequest";
1157    fn unknown_fields(&self) -> &::buffa::UnknownFields {
1158        &self.__buffa_unknown_fields
1159    }
1160    fn unknown_fields_mut(&mut self) -> &mut ::buffa::UnknownFields {
1161        &mut self.__buffa_unknown_fields
1162    }
1163}
1164impl ::buffa::json_helpers::ProtoElemJson for GetZippedAssetSupplyGroupRequest {
1165    fn serialize_proto_json<S: ::serde::Serializer>(
1166        v: &Self,
1167        s: S,
1168    ) -> ::core::result::Result<S::Ok, S::Error> {
1169        ::serde::Serialize::serialize(v, s)
1170    }
1171    fn deserialize_proto_json<'de, D: ::serde::Deserializer<'de>>(
1172        d: D,
1173    ) -> ::core::result::Result<Self, D::Error> {
1174        <Self as ::serde::Deserialize>::deserialize(d)
1175    }
1176}
1177#[doc(hidden)]
1178pub const __GET_ZIPPED_ASSET_SUPPLY_GROUP_REQUEST_JSON_ANY: ::buffa::type_registry::JsonAnyEntry = ::buffa::type_registry::JsonAnyEntry {
1179    type_url: "type.googleapis.com/chain.analytics.v1.GetZippedAssetSupplyGroupRequest",
1180    to_json: ::buffa::type_registry::any_to_json::<GetZippedAssetSupplyGroupRequest>,
1181    from_json: ::buffa::type_registry::any_from_json::<GetZippedAssetSupplyGroupRequest>,
1182    is_wkt: false,
1183};
1184/// GetZippedAssetSupplyGroupResponse returns grouped zipped asset supply chart columns.
1185#[derive(Clone, PartialEq, Default)]
1186#[derive(::serde::Serialize, ::serde::Deserialize)]
1187#[serde(default)]
1188pub struct GetZippedAssetSupplyGroupResponse {
1189    /// Zipped asset group identifier.
1190    ///
1191    /// Field 1: `group_id`
1192    #[serde(
1193        rename = "groupId",
1194        alias = "group_id",
1195        with = "::buffa::json_helpers::proto_string",
1196        skip_serializing_if = "::buffa::json_helpers::skip_if::is_empty_str"
1197    )]
1198    pub group_id: ::buffa::alloc::string::String,
1199    /// Resolved history window.
1200    ///
1201    /// Field 2: `range`
1202    #[serde(
1203        rename = "range",
1204        with = "::buffa::json_helpers::proto_enum",
1205        skip_serializing_if = "::buffa::json_helpers::skip_if::is_default_enum_value"
1206    )]
1207    pub range: ::buffa::EnumValue<ChainAnalyticsRange>,
1208    /// Resolved bucket duration.
1209    ///
1210    /// Field 3: `bucket`
1211    #[serde(
1212        rename = "bucket",
1213        with = "::buffa::json_helpers::proto_string",
1214        skip_serializing_if = "::buffa::json_helpers::skip_if::is_empty_str"
1215    )]
1216    pub bucket: ::buffa::alloc::string::String,
1217    /// First bucket timestamp in seconds since Unix epoch.
1218    ///
1219    /// Field 4: `start_ts_sec`
1220    #[serde(
1221        rename = "startTsSec",
1222        alias = "start_ts_sec",
1223        with = "::buffa::json_helpers::uint32",
1224        skip_serializing_if = "::buffa::json_helpers::skip_if::is_zero_u32"
1225    )]
1226    pub start_ts_sec: u32,
1227    /// Last bucket timestamp in seconds since Unix epoch.
1228    ///
1229    /// Field 5: `end_ts_sec`
1230    #[serde(
1231        rename = "endTsSec",
1232        alias = "end_ts_sec",
1233        with = "::buffa::json_helpers::uint32",
1234        skip_serializing_if = "::buffa::json_helpers::skip_if::is_zero_u32"
1235    )]
1236    pub end_ts_sec: u32,
1237    /// Number of buckets represented by each value column.
1238    ///
1239    /// Field 6: `points`
1240    #[serde(
1241        rename = "points",
1242        with = "::buffa::json_helpers::uint32",
1243        skip_serializing_if = "::buffa::json_helpers::skip_if::is_zero_u32"
1244    )]
1245    pub points: u32,
1246    /// One supply column per zipped asset route in the group.
1247    ///
1248    /// Field 7: `series`
1249    #[serde(
1250        rename = "series",
1251        skip_serializing_if = "::buffa::json_helpers::skip_if::is_empty_vec",
1252        deserialize_with = "::buffa::json_helpers::null_as_default"
1253    )]
1254    pub series: ::buffa::alloc::vec::Vec<ZippedAssetSupplySeries>,
1255    #[serde(skip)]
1256    #[doc(hidden)]
1257    pub __buffa_unknown_fields: ::buffa::UnknownFields,
1258}
1259impl ::core::fmt::Debug for GetZippedAssetSupplyGroupResponse {
1260    fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
1261        f.debug_struct("GetZippedAssetSupplyGroupResponse")
1262            .field("group_id", &self.group_id)
1263            .field("range", &self.range)
1264            .field("bucket", &self.bucket)
1265            .field("start_ts_sec", &self.start_ts_sec)
1266            .field("end_ts_sec", &self.end_ts_sec)
1267            .field("points", &self.points)
1268            .field("series", &self.series)
1269            .finish()
1270    }
1271}
1272impl GetZippedAssetSupplyGroupResponse {
1273    /// Protobuf type URL for this message, for use with `Any::pack` and
1274    /// `Any::unpack_if`.
1275    ///
1276    /// Format: `type.googleapis.com/<fully.qualified.TypeName>`
1277    pub const TYPE_URL: &'static str = "type.googleapis.com/chain.analytics.v1.GetZippedAssetSupplyGroupResponse";
1278}
1279::buffa::impl_default_instance!(GetZippedAssetSupplyGroupResponse);
1280impl ::buffa::MessageName for GetZippedAssetSupplyGroupResponse {
1281    const PACKAGE: &'static str = "chain.analytics.v1";
1282    const NAME: &'static str = "GetZippedAssetSupplyGroupResponse";
1283    const FULL_NAME: &'static str = "chain.analytics.v1.GetZippedAssetSupplyGroupResponse";
1284    const TYPE_URL: &'static str = "type.googleapis.com/chain.analytics.v1.GetZippedAssetSupplyGroupResponse";
1285}
1286impl ::buffa::Message for GetZippedAssetSupplyGroupResponse {
1287    /// Returns the total encoded size in bytes.
1288    ///
1289    /// The result is a `u32`; the protobuf specification requires all
1290    /// messages to fit within 2 GiB (2,147,483,647 bytes), so a
1291    /// compliant message will never overflow this type.
1292    #[allow(clippy::let_and_return)]
1293    fn compute_size(&self, __cache: &mut ::buffa::SizeCache) -> u32 {
1294        #[allow(unused_imports)]
1295        use ::buffa::Enumeration as _;
1296        let mut size = 0u32;
1297        if !self.group_id.is_empty() {
1298            size += 1u32 + ::buffa::types::string_encoded_len(&self.group_id) as u32;
1299        }
1300        {
1301            let val = self.range.to_i32();
1302            if val != 0 {
1303                size += 1u32 + ::buffa::types::int32_encoded_len(val) as u32;
1304            }
1305        }
1306        if !self.bucket.is_empty() {
1307            size += 1u32 + ::buffa::types::string_encoded_len(&self.bucket) as u32;
1308        }
1309        if self.start_ts_sec != 0u32 {
1310            size += 1u32 + ::buffa::types::FIXED32_ENCODED_LEN as u32;
1311        }
1312        if self.end_ts_sec != 0u32 {
1313            size += 1u32 + ::buffa::types::FIXED32_ENCODED_LEN as u32;
1314        }
1315        if self.points != 0u32 {
1316            size += 1u32 + ::buffa::types::uint32_encoded_len(self.points) as u32;
1317        }
1318        for v in &self.series {
1319            let __slot = __cache.reserve();
1320            let inner_size = v.compute_size(__cache);
1321            __cache.set(__slot, inner_size);
1322            size
1323                += 1u32 + ::buffa::encoding::varint_len(inner_size as u64) as u32
1324                    + inner_size;
1325        }
1326        size += self.__buffa_unknown_fields.encoded_len() as u32;
1327        size
1328    }
1329    fn write_to(
1330        &self,
1331        __cache: &mut ::buffa::SizeCache,
1332        buf: &mut impl ::buffa::bytes::BufMut,
1333    ) {
1334        #[allow(unused_imports)]
1335        use ::buffa::Enumeration as _;
1336        if !self.group_id.is_empty() {
1337            ::buffa::types::put_string_field(1u32, &self.group_id, buf);
1338        }
1339        {
1340            let val = self.range.to_i32();
1341            if val != 0 {
1342                ::buffa::types::put_int32_field(2u32, val, buf);
1343            }
1344        }
1345        if !self.bucket.is_empty() {
1346            ::buffa::types::put_string_field(3u32, &self.bucket, buf);
1347        }
1348        if self.start_ts_sec != 0u32 {
1349            ::buffa::types::put_fixed32_field(4u32, self.start_ts_sec, buf);
1350        }
1351        if self.end_ts_sec != 0u32 {
1352            ::buffa::types::put_fixed32_field(5u32, self.end_ts_sec, buf);
1353        }
1354        if self.points != 0u32 {
1355            ::buffa::types::put_uint32_field(6u32, self.points, buf);
1356        }
1357        for v in &self.series {
1358            ::buffa::types::put_len_delimited_header(7u32, __cache.consume_next(), buf);
1359            v.write_to(__cache, buf);
1360        }
1361        self.__buffa_unknown_fields.write_to(buf);
1362    }
1363    fn merge_field(
1364        &mut self,
1365        tag: ::buffa::encoding::Tag,
1366        buf: &mut impl ::buffa::bytes::Buf,
1367        ctx: ::buffa::DecodeContext<'_>,
1368    ) -> ::core::result::Result<(), ::buffa::DecodeError> {
1369        #[allow(unused_imports)]
1370        use ::buffa::bytes::Buf as _;
1371        #[allow(unused_imports)]
1372        use ::buffa::Enumeration as _;
1373        match tag.field_number() {
1374            1u32 => {
1375                ::buffa::encoding::check_wire_type(
1376                    tag,
1377                    ::buffa::encoding::WireType::LengthDelimited,
1378                )?;
1379                ::buffa::types::merge_string(&mut self.group_id, buf)?;
1380            }
1381            2u32 => {
1382                ::buffa::encoding::check_wire_type(
1383                    tag,
1384                    ::buffa::encoding::WireType::Varint,
1385                )?;
1386                self.range = ::buffa::EnumValue::from(
1387                    ::buffa::types::decode_int32(buf)?,
1388                );
1389            }
1390            3u32 => {
1391                ::buffa::encoding::check_wire_type(
1392                    tag,
1393                    ::buffa::encoding::WireType::LengthDelimited,
1394                )?;
1395                ::buffa::types::merge_string(&mut self.bucket, buf)?;
1396            }
1397            4u32 => {
1398                ::buffa::encoding::check_wire_type(
1399                    tag,
1400                    ::buffa::encoding::WireType::Fixed32,
1401                )?;
1402                self.start_ts_sec = ::buffa::types::decode_fixed32(buf)?;
1403            }
1404            5u32 => {
1405                ::buffa::encoding::check_wire_type(
1406                    tag,
1407                    ::buffa::encoding::WireType::Fixed32,
1408                )?;
1409                self.end_ts_sec = ::buffa::types::decode_fixed32(buf)?;
1410            }
1411            6u32 => {
1412                ::buffa::encoding::check_wire_type(
1413                    tag,
1414                    ::buffa::encoding::WireType::Varint,
1415                )?;
1416                self.points = ::buffa::types::decode_uint32(buf)?;
1417            }
1418            7u32 => {
1419                ::buffa::encoding::check_wire_type(
1420                    tag,
1421                    ::buffa::encoding::WireType::LengthDelimited,
1422                )?;
1423                let mut elem = ::core::default::Default::default();
1424                ::buffa::Message::merge_length_delimited(&mut elem, buf, ctx)?;
1425                self.series.push(elem);
1426            }
1427            _ => {
1428                self.__buffa_unknown_fields
1429                    .push(::buffa::encoding::decode_unknown_field(tag, buf, ctx)?);
1430            }
1431        }
1432        ::core::result::Result::Ok(())
1433    }
1434    fn clear(&mut self) {
1435        self.group_id.clear();
1436        self.range = ::buffa::EnumValue::from(0);
1437        self.bucket.clear();
1438        self.start_ts_sec = 0u32;
1439        self.end_ts_sec = 0u32;
1440        self.points = 0u32;
1441        self.series.clear();
1442        self.__buffa_unknown_fields.clear();
1443    }
1444}
1445impl ::buffa::ExtensionSet for GetZippedAssetSupplyGroupResponse {
1446    const PROTO_FQN: &'static str = "chain.analytics.v1.GetZippedAssetSupplyGroupResponse";
1447    fn unknown_fields(&self) -> &::buffa::UnknownFields {
1448        &self.__buffa_unknown_fields
1449    }
1450    fn unknown_fields_mut(&mut self) -> &mut ::buffa::UnknownFields {
1451        &mut self.__buffa_unknown_fields
1452    }
1453}
1454impl ::buffa::json_helpers::ProtoElemJson for GetZippedAssetSupplyGroupResponse {
1455    fn serialize_proto_json<S: ::serde::Serializer>(
1456        v: &Self,
1457        s: S,
1458    ) -> ::core::result::Result<S::Ok, S::Error> {
1459        ::serde::Serialize::serialize(v, s)
1460    }
1461    fn deserialize_proto_json<'de, D: ::serde::Deserializer<'de>>(
1462        d: D,
1463    ) -> ::core::result::Result<Self, D::Error> {
1464        <Self as ::serde::Deserialize>::deserialize(d)
1465    }
1466}
1467#[doc(hidden)]
1468pub const __GET_ZIPPED_ASSET_SUPPLY_GROUP_RESPONSE_JSON_ANY: ::buffa::type_registry::JsonAnyEntry = ::buffa::type_registry::JsonAnyEntry {
1469    type_url: "type.googleapis.com/chain.analytics.v1.GetZippedAssetSupplyGroupResponse",
1470    to_json: ::buffa::type_registry::any_to_json::<GetZippedAssetSupplyGroupResponse>,
1471    from_json: ::buffa::type_registry::any_from_json::<
1472        GetZippedAssetSupplyGroupResponse,
1473    >,
1474    is_wkt: false,
1475};
1476/// GetUnifiedAssetBalancesRequest selects total unified asset balances.
1477#[derive(Clone, PartialEq, Default)]
1478#[derive(::serde::Serialize, ::serde::Deserialize)]
1479#[serde(default)]
1480pub struct GetUnifiedAssetBalancesRequest {
1481    /// Unified asset identifier.
1482    ///
1483    /// Field 1: `asset_id`
1484    #[serde(
1485        rename = "assetId",
1486        alias = "asset_id",
1487        with = "::buffa::json_helpers::uint32",
1488        skip_serializing_if = "::buffa::json_helpers::skip_if::is_zero_u32"
1489    )]
1490    pub asset_id: u32,
1491    /// Standard history window. Defaults to 1 day when unspecified.
1492    ///
1493    /// Field 2: `range`
1494    #[serde(
1495        rename = "range",
1496        with = "::buffa::json_helpers::proto_enum",
1497        skip_serializing_if = "::buffa::json_helpers::skip_if::is_default_enum_value"
1498    )]
1499    pub range: ::buffa::EnumValue<ChainAnalyticsRange>,
1500    /// Optional explicit bucket. Allowed values are 1m, 5m, 10m, 15m, 30m, 1h, 2h, 4h, 8h, 12h, or 1d.
1501    /// Valid buckets depend on range to keep chart payloads near 1k points.
1502    /// When omitted, the server picks the default bucket for the selected range.
1503    ///
1504    /// Field 3: `bucket`
1505    #[serde(
1506        rename = "bucket",
1507        with = "::buffa::json_helpers::proto_string",
1508        skip_serializing_if = "::buffa::json_helpers::skip_if::is_empty_str"
1509    )]
1510    pub bucket: ::buffa::alloc::string::String,
1511    /// Optional inclusive start timestamp in seconds since Unix epoch.
1512    ///
1513    /// Field 4: `start_ts_sec`
1514    #[serde(
1515        rename = "startTsSec",
1516        alias = "start_ts_sec",
1517        with = "::buffa::json_helpers::uint32",
1518        skip_serializing_if = "::buffa::json_helpers::skip_if::is_zero_u32"
1519    )]
1520    pub start_ts_sec: u32,
1521    /// Optional inclusive end timestamp in seconds since Unix epoch.
1522    ///
1523    /// Field 5: `end_ts_sec`
1524    #[serde(
1525        rename = "endTsSec",
1526        alias = "end_ts_sec",
1527        with = "::buffa::json_helpers::uint32",
1528        skip_serializing_if = "::buffa::json_helpers::skip_if::is_zero_u32"
1529    )]
1530    pub end_ts_sec: u32,
1531    #[serde(skip)]
1532    #[doc(hidden)]
1533    pub __buffa_unknown_fields: ::buffa::UnknownFields,
1534}
1535impl ::core::fmt::Debug for GetUnifiedAssetBalancesRequest {
1536    fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
1537        f.debug_struct("GetUnifiedAssetBalancesRequest")
1538            .field("asset_id", &self.asset_id)
1539            .field("range", &self.range)
1540            .field("bucket", &self.bucket)
1541            .field("start_ts_sec", &self.start_ts_sec)
1542            .field("end_ts_sec", &self.end_ts_sec)
1543            .finish()
1544    }
1545}
1546impl GetUnifiedAssetBalancesRequest {
1547    /// Protobuf type URL for this message, for use with `Any::pack` and
1548    /// `Any::unpack_if`.
1549    ///
1550    /// Format: `type.googleapis.com/<fully.qualified.TypeName>`
1551    pub const TYPE_URL: &'static str = "type.googleapis.com/chain.analytics.v1.GetUnifiedAssetBalancesRequest";
1552}
1553::buffa::impl_default_instance!(GetUnifiedAssetBalancesRequest);
1554impl ::buffa::MessageName for GetUnifiedAssetBalancesRequest {
1555    const PACKAGE: &'static str = "chain.analytics.v1";
1556    const NAME: &'static str = "GetUnifiedAssetBalancesRequest";
1557    const FULL_NAME: &'static str = "chain.analytics.v1.GetUnifiedAssetBalancesRequest";
1558    const TYPE_URL: &'static str = "type.googleapis.com/chain.analytics.v1.GetUnifiedAssetBalancesRequest";
1559}
1560impl ::buffa::Message for GetUnifiedAssetBalancesRequest {
1561    /// Returns the total encoded size in bytes.
1562    ///
1563    /// The result is a `u32`; the protobuf specification requires all
1564    /// messages to fit within 2 GiB (2,147,483,647 bytes), so a
1565    /// compliant message will never overflow this type.
1566    #[allow(clippy::let_and_return)]
1567    fn compute_size(&self, _cache: &mut ::buffa::SizeCache) -> u32 {
1568        #[allow(unused_imports)]
1569        use ::buffa::Enumeration as _;
1570        let mut size = 0u32;
1571        if self.asset_id != 0u32 {
1572            size += 1u32 + ::buffa::types::uint32_encoded_len(self.asset_id) as u32;
1573        }
1574        {
1575            let val = self.range.to_i32();
1576            if val != 0 {
1577                size += 1u32 + ::buffa::types::int32_encoded_len(val) as u32;
1578            }
1579        }
1580        if !self.bucket.is_empty() {
1581            size += 1u32 + ::buffa::types::string_encoded_len(&self.bucket) as u32;
1582        }
1583        if self.start_ts_sec != 0u32 {
1584            size += 1u32 + ::buffa::types::FIXED32_ENCODED_LEN as u32;
1585        }
1586        if self.end_ts_sec != 0u32 {
1587            size += 1u32 + ::buffa::types::FIXED32_ENCODED_LEN as u32;
1588        }
1589        size += self.__buffa_unknown_fields.encoded_len() as u32;
1590        size
1591    }
1592    fn write_to(
1593        &self,
1594        _cache: &mut ::buffa::SizeCache,
1595        buf: &mut impl ::buffa::bytes::BufMut,
1596    ) {
1597        #[allow(unused_imports)]
1598        use ::buffa::Enumeration as _;
1599        if self.asset_id != 0u32 {
1600            ::buffa::types::put_uint32_field(1u32, self.asset_id, buf);
1601        }
1602        {
1603            let val = self.range.to_i32();
1604            if val != 0 {
1605                ::buffa::types::put_int32_field(2u32, val, buf);
1606            }
1607        }
1608        if !self.bucket.is_empty() {
1609            ::buffa::types::put_string_field(3u32, &self.bucket, buf);
1610        }
1611        if self.start_ts_sec != 0u32 {
1612            ::buffa::types::put_fixed32_field(4u32, self.start_ts_sec, buf);
1613        }
1614        if self.end_ts_sec != 0u32 {
1615            ::buffa::types::put_fixed32_field(5u32, self.end_ts_sec, buf);
1616        }
1617        self.__buffa_unknown_fields.write_to(buf);
1618    }
1619    fn merge_field(
1620        &mut self,
1621        tag: ::buffa::encoding::Tag,
1622        buf: &mut impl ::buffa::bytes::Buf,
1623        ctx: ::buffa::DecodeContext<'_>,
1624    ) -> ::core::result::Result<(), ::buffa::DecodeError> {
1625        #[allow(unused_imports)]
1626        use ::buffa::bytes::Buf as _;
1627        #[allow(unused_imports)]
1628        use ::buffa::Enumeration as _;
1629        match tag.field_number() {
1630            1u32 => {
1631                ::buffa::encoding::check_wire_type(
1632                    tag,
1633                    ::buffa::encoding::WireType::Varint,
1634                )?;
1635                self.asset_id = ::buffa::types::decode_uint32(buf)?;
1636            }
1637            2u32 => {
1638                ::buffa::encoding::check_wire_type(
1639                    tag,
1640                    ::buffa::encoding::WireType::Varint,
1641                )?;
1642                self.range = ::buffa::EnumValue::from(
1643                    ::buffa::types::decode_int32(buf)?,
1644                );
1645            }
1646            3u32 => {
1647                ::buffa::encoding::check_wire_type(
1648                    tag,
1649                    ::buffa::encoding::WireType::LengthDelimited,
1650                )?;
1651                ::buffa::types::merge_string(&mut self.bucket, buf)?;
1652            }
1653            4u32 => {
1654                ::buffa::encoding::check_wire_type(
1655                    tag,
1656                    ::buffa::encoding::WireType::Fixed32,
1657                )?;
1658                self.start_ts_sec = ::buffa::types::decode_fixed32(buf)?;
1659            }
1660            5u32 => {
1661                ::buffa::encoding::check_wire_type(
1662                    tag,
1663                    ::buffa::encoding::WireType::Fixed32,
1664                )?;
1665                self.end_ts_sec = ::buffa::types::decode_fixed32(buf)?;
1666            }
1667            _ => {
1668                self.__buffa_unknown_fields
1669                    .push(::buffa::encoding::decode_unknown_field(tag, buf, ctx)?);
1670            }
1671        }
1672        ::core::result::Result::Ok(())
1673    }
1674    fn clear(&mut self) {
1675        self.asset_id = 0u32;
1676        self.range = ::buffa::EnumValue::from(0);
1677        self.bucket.clear();
1678        self.start_ts_sec = 0u32;
1679        self.end_ts_sec = 0u32;
1680        self.__buffa_unknown_fields.clear();
1681    }
1682}
1683impl ::buffa::ExtensionSet for GetUnifiedAssetBalancesRequest {
1684    const PROTO_FQN: &'static str = "chain.analytics.v1.GetUnifiedAssetBalancesRequest";
1685    fn unknown_fields(&self) -> &::buffa::UnknownFields {
1686        &self.__buffa_unknown_fields
1687    }
1688    fn unknown_fields_mut(&mut self) -> &mut ::buffa::UnknownFields {
1689        &mut self.__buffa_unknown_fields
1690    }
1691}
1692impl ::buffa::json_helpers::ProtoElemJson for GetUnifiedAssetBalancesRequest {
1693    fn serialize_proto_json<S: ::serde::Serializer>(
1694        v: &Self,
1695        s: S,
1696    ) -> ::core::result::Result<S::Ok, S::Error> {
1697        ::serde::Serialize::serialize(v, s)
1698    }
1699    fn deserialize_proto_json<'de, D: ::serde::Deserializer<'de>>(
1700        d: D,
1701    ) -> ::core::result::Result<Self, D::Error> {
1702        <Self as ::serde::Deserialize>::deserialize(d)
1703    }
1704}
1705#[doc(hidden)]
1706pub const __GET_UNIFIED_ASSET_BALANCES_REQUEST_JSON_ANY: ::buffa::type_registry::JsonAnyEntry = ::buffa::type_registry::JsonAnyEntry {
1707    type_url: "type.googleapis.com/chain.analytics.v1.GetUnifiedAssetBalancesRequest",
1708    to_json: ::buffa::type_registry::any_to_json::<GetUnifiedAssetBalancesRequest>,
1709    from_json: ::buffa::type_registry::any_from_json::<GetUnifiedAssetBalancesRequest>,
1710    is_wkt: false,
1711};
1712/// GetUnifiedAssetBalancesResponse returns unified asset balance chart columns.
1713#[derive(Clone, PartialEq, Default)]
1714#[derive(::serde::Serialize, ::serde::Deserialize)]
1715#[serde(default)]
1716pub struct GetUnifiedAssetBalancesResponse {
1717    /// Unified asset identifier.
1718    ///
1719    /// Field 1: `asset_id`
1720    #[serde(
1721        rename = "assetId",
1722        alias = "asset_id",
1723        with = "::buffa::json_helpers::uint32",
1724        skip_serializing_if = "::buffa::json_helpers::skip_if::is_zero_u32"
1725    )]
1726    pub asset_id: u32,
1727    /// Resolved history window.
1728    ///
1729    /// Field 2: `range`
1730    #[serde(
1731        rename = "range",
1732        with = "::buffa::json_helpers::proto_enum",
1733        skip_serializing_if = "::buffa::json_helpers::skip_if::is_default_enum_value"
1734    )]
1735    pub range: ::buffa::EnumValue<ChainAnalyticsRange>,
1736    /// Resolved bucket duration.
1737    ///
1738    /// Field 3: `bucket`
1739    #[serde(
1740        rename = "bucket",
1741        with = "::buffa::json_helpers::proto_string",
1742        skip_serializing_if = "::buffa::json_helpers::skip_if::is_empty_str"
1743    )]
1744    pub bucket: ::buffa::alloc::string::String,
1745    /// First bucket timestamp in seconds since Unix epoch.
1746    ///
1747    /// Field 4: `start_ts_sec`
1748    #[serde(
1749        rename = "startTsSec",
1750        alias = "start_ts_sec",
1751        with = "::buffa::json_helpers::uint32",
1752        skip_serializing_if = "::buffa::json_helpers::skip_if::is_zero_u32"
1753    )]
1754    pub start_ts_sec: u32,
1755    /// Last bucket timestamp in seconds since Unix epoch.
1756    ///
1757    /// Field 5: `end_ts_sec`
1758    #[serde(
1759        rename = "endTsSec",
1760        alias = "end_ts_sec",
1761        with = "::buffa::json_helpers::uint32",
1762        skip_serializing_if = "::buffa::json_helpers::skip_if::is_zero_u32"
1763    )]
1764    pub end_ts_sec: u32,
1765    /// Number of buckets represented by each value column.
1766    ///
1767    /// Field 6: `points`
1768    #[serde(
1769        rename = "points",
1770        with = "::buffa::json_helpers::uint32",
1771        skip_serializing_if = "::buffa::json_helpers::skip_if::is_zero_u32"
1772    )]
1773    pub points: u32,
1774    /// Total unified balance per bucket across public account surfaces, scaled by
1775    /// AssetConfig.quantity_scale from SpotConfig for asset_id.
1776    /// Decode: total_balance_q / 10^quantity_scale.
1777    ///
1778    /// Field 7: `total_balance_q`
1779    #[serde(
1780        rename = "totalBalanceQ",
1781        alias = "total_balance_q",
1782        with = "::buffa::json_helpers::proto_seq",
1783        skip_serializing_if = "::buffa::json_helpers::skip_if::is_empty_vec"
1784    )]
1785    pub total_balance_q: ::buffa::alloc::vec::Vec<u64>,
1786    #[serde(skip)]
1787    #[doc(hidden)]
1788    pub __buffa_unknown_fields: ::buffa::UnknownFields,
1789}
1790impl ::core::fmt::Debug for GetUnifiedAssetBalancesResponse {
1791    fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
1792        f.debug_struct("GetUnifiedAssetBalancesResponse")
1793            .field("asset_id", &self.asset_id)
1794            .field("range", &self.range)
1795            .field("bucket", &self.bucket)
1796            .field("start_ts_sec", &self.start_ts_sec)
1797            .field("end_ts_sec", &self.end_ts_sec)
1798            .field("points", &self.points)
1799            .field("total_balance_q", &self.total_balance_q)
1800            .finish()
1801    }
1802}
1803impl GetUnifiedAssetBalancesResponse {
1804    /// Protobuf type URL for this message, for use with `Any::pack` and
1805    /// `Any::unpack_if`.
1806    ///
1807    /// Format: `type.googleapis.com/<fully.qualified.TypeName>`
1808    pub const TYPE_URL: &'static str = "type.googleapis.com/chain.analytics.v1.GetUnifiedAssetBalancesResponse";
1809}
1810::buffa::impl_default_instance!(GetUnifiedAssetBalancesResponse);
1811impl ::buffa::MessageName for GetUnifiedAssetBalancesResponse {
1812    const PACKAGE: &'static str = "chain.analytics.v1";
1813    const NAME: &'static str = "GetUnifiedAssetBalancesResponse";
1814    const FULL_NAME: &'static str = "chain.analytics.v1.GetUnifiedAssetBalancesResponse";
1815    const TYPE_URL: &'static str = "type.googleapis.com/chain.analytics.v1.GetUnifiedAssetBalancesResponse";
1816}
1817impl ::buffa::Message for GetUnifiedAssetBalancesResponse {
1818    /// Returns the total encoded size in bytes.
1819    ///
1820    /// The result is a `u32`; the protobuf specification requires all
1821    /// messages to fit within 2 GiB (2,147,483,647 bytes), so a
1822    /// compliant message will never overflow this type.
1823    #[allow(clippy::let_and_return)]
1824    fn compute_size(&self, _cache: &mut ::buffa::SizeCache) -> u32 {
1825        #[allow(unused_imports)]
1826        use ::buffa::Enumeration as _;
1827        let mut size = 0u32;
1828        if self.asset_id != 0u32 {
1829            size += 1u32 + ::buffa::types::uint32_encoded_len(self.asset_id) as u32;
1830        }
1831        {
1832            let val = self.range.to_i32();
1833            if val != 0 {
1834                size += 1u32 + ::buffa::types::int32_encoded_len(val) as u32;
1835            }
1836        }
1837        if !self.bucket.is_empty() {
1838            size += 1u32 + ::buffa::types::string_encoded_len(&self.bucket) as u32;
1839        }
1840        if self.start_ts_sec != 0u32 {
1841            size += 1u32 + ::buffa::types::FIXED32_ENCODED_LEN as u32;
1842        }
1843        if self.end_ts_sec != 0u32 {
1844            size += 1u32 + ::buffa::types::FIXED32_ENCODED_LEN as u32;
1845        }
1846        if self.points != 0u32 {
1847            size += 1u32 + ::buffa::types::uint32_encoded_len(self.points) as u32;
1848        }
1849        if !self.total_balance_q.is_empty() {
1850            let payload: u32 = self
1851                .total_balance_q
1852                .iter()
1853                .map(|&v| ::buffa::types::uint64_encoded_len(v) as u32)
1854                .sum::<u32>();
1855            size
1856                += 1u32 + ::buffa::encoding::varint_len(payload as u64) as u32 + payload;
1857        }
1858        size += self.__buffa_unknown_fields.encoded_len() as u32;
1859        size
1860    }
1861    fn write_to(
1862        &self,
1863        _cache: &mut ::buffa::SizeCache,
1864        buf: &mut impl ::buffa::bytes::BufMut,
1865    ) {
1866        #[allow(unused_imports)]
1867        use ::buffa::Enumeration as _;
1868        if self.asset_id != 0u32 {
1869            ::buffa::types::put_uint32_field(1u32, self.asset_id, buf);
1870        }
1871        {
1872            let val = self.range.to_i32();
1873            if val != 0 {
1874                ::buffa::types::put_int32_field(2u32, val, buf);
1875            }
1876        }
1877        if !self.bucket.is_empty() {
1878            ::buffa::types::put_string_field(3u32, &self.bucket, buf);
1879        }
1880        if self.start_ts_sec != 0u32 {
1881            ::buffa::types::put_fixed32_field(4u32, self.start_ts_sec, buf);
1882        }
1883        if self.end_ts_sec != 0u32 {
1884            ::buffa::types::put_fixed32_field(5u32, self.end_ts_sec, buf);
1885        }
1886        if self.points != 0u32 {
1887            ::buffa::types::put_uint32_field(6u32, self.points, buf);
1888        }
1889        if !self.total_balance_q.is_empty() {
1890            let payload: u32 = self
1891                .total_balance_q
1892                .iter()
1893                .map(|&v| ::buffa::types::uint64_encoded_len(v) as u32)
1894                .sum::<u32>();
1895            ::buffa::types::put_len_delimited_header(7u32, payload, buf);
1896            for &v in &self.total_balance_q {
1897                ::buffa::types::encode_uint64(v, buf);
1898            }
1899        }
1900        self.__buffa_unknown_fields.write_to(buf);
1901    }
1902    fn merge_field(
1903        &mut self,
1904        tag: ::buffa::encoding::Tag,
1905        buf: &mut impl ::buffa::bytes::Buf,
1906        ctx: ::buffa::DecodeContext<'_>,
1907    ) -> ::core::result::Result<(), ::buffa::DecodeError> {
1908        #[allow(unused_imports)]
1909        use ::buffa::bytes::Buf as _;
1910        #[allow(unused_imports)]
1911        use ::buffa::Enumeration as _;
1912        match tag.field_number() {
1913            1u32 => {
1914                ::buffa::encoding::check_wire_type(
1915                    tag,
1916                    ::buffa::encoding::WireType::Varint,
1917                )?;
1918                self.asset_id = ::buffa::types::decode_uint32(buf)?;
1919            }
1920            2u32 => {
1921                ::buffa::encoding::check_wire_type(
1922                    tag,
1923                    ::buffa::encoding::WireType::Varint,
1924                )?;
1925                self.range = ::buffa::EnumValue::from(
1926                    ::buffa::types::decode_int32(buf)?,
1927                );
1928            }
1929            3u32 => {
1930                ::buffa::encoding::check_wire_type(
1931                    tag,
1932                    ::buffa::encoding::WireType::LengthDelimited,
1933                )?;
1934                ::buffa::types::merge_string(&mut self.bucket, buf)?;
1935            }
1936            4u32 => {
1937                ::buffa::encoding::check_wire_type(
1938                    tag,
1939                    ::buffa::encoding::WireType::Fixed32,
1940                )?;
1941                self.start_ts_sec = ::buffa::types::decode_fixed32(buf)?;
1942            }
1943            5u32 => {
1944                ::buffa::encoding::check_wire_type(
1945                    tag,
1946                    ::buffa::encoding::WireType::Fixed32,
1947                )?;
1948                self.end_ts_sec = ::buffa::types::decode_fixed32(buf)?;
1949            }
1950            6u32 => {
1951                ::buffa::encoding::check_wire_type(
1952                    tag,
1953                    ::buffa::encoding::WireType::Varint,
1954                )?;
1955                self.points = ::buffa::types::decode_uint32(buf)?;
1956            }
1957            7u32 => {
1958                if tag.wire_type() == ::buffa::encoding::WireType::LengthDelimited {
1959                    let len = ::buffa::encoding::decode_varint(buf)?;
1960                    let len = usize::try_from(len)
1961                        .map_err(|_| ::buffa::DecodeError::MessageTooLarge)?;
1962                    if buf.remaining() < len {
1963                        return ::core::result::Result::Err(
1964                            ::buffa::DecodeError::UnexpectedEof,
1965                        );
1966                    }
1967                    self.total_balance_q.reserve(len);
1968                    let mut limited = buf.take(len);
1969                    while limited.has_remaining() {
1970                        self.total_balance_q
1971                            .push(::buffa::types::decode_uint64(&mut limited)?);
1972                    }
1973                    let leftover = limited.remaining();
1974                    if leftover > 0 {
1975                        limited.advance(leftover);
1976                    }
1977                } else if tag.wire_type() == ::buffa::encoding::WireType::Varint {
1978                    self.total_balance_q.push(::buffa::types::decode_uint64(buf)?);
1979                } else {
1980                    return ::core::result::Result::Err(
1981                        ::buffa::encoding::wire_type_mismatch(
1982                            tag,
1983                            ::buffa::encoding::WireType::LengthDelimited,
1984                        ),
1985                    );
1986                }
1987            }
1988            _ => {
1989                self.__buffa_unknown_fields
1990                    .push(::buffa::encoding::decode_unknown_field(tag, buf, ctx)?);
1991            }
1992        }
1993        ::core::result::Result::Ok(())
1994    }
1995    fn clear(&mut self) {
1996        self.asset_id = 0u32;
1997        self.range = ::buffa::EnumValue::from(0);
1998        self.bucket.clear();
1999        self.start_ts_sec = 0u32;
2000        self.end_ts_sec = 0u32;
2001        self.points = 0u32;
2002        self.total_balance_q.clear();
2003        self.__buffa_unknown_fields.clear();
2004    }
2005}
2006impl ::buffa::ExtensionSet for GetUnifiedAssetBalancesResponse {
2007    const PROTO_FQN: &'static str = "chain.analytics.v1.GetUnifiedAssetBalancesResponse";
2008    fn unknown_fields(&self) -> &::buffa::UnknownFields {
2009        &self.__buffa_unknown_fields
2010    }
2011    fn unknown_fields_mut(&mut self) -> &mut ::buffa::UnknownFields {
2012        &mut self.__buffa_unknown_fields
2013    }
2014}
2015impl ::buffa::json_helpers::ProtoElemJson for GetUnifiedAssetBalancesResponse {
2016    fn serialize_proto_json<S: ::serde::Serializer>(
2017        v: &Self,
2018        s: S,
2019    ) -> ::core::result::Result<S::Ok, S::Error> {
2020        ::serde::Serialize::serialize(v, s)
2021    }
2022    fn deserialize_proto_json<'de, D: ::serde::Deserializer<'de>>(
2023        d: D,
2024    ) -> ::core::result::Result<Self, D::Error> {
2025        <Self as ::serde::Deserialize>::deserialize(d)
2026    }
2027}
2028#[doc(hidden)]
2029pub const __GET_UNIFIED_ASSET_BALANCES_RESPONSE_JSON_ANY: ::buffa::type_registry::JsonAnyEntry = ::buffa::type_registry::JsonAnyEntry {
2030    type_url: "type.googleapis.com/chain.analytics.v1.GetUnifiedAssetBalancesResponse",
2031    to_json: ::buffa::type_registry::any_to_json::<GetUnifiedAssetBalancesResponse>,
2032    from_json: ::buffa::type_registry::any_from_json::<GetUnifiedAssetBalancesResponse>,
2033    is_wkt: false,
2034};
2035#[allow(
2036    non_camel_case_types,
2037    dead_code,
2038    unused_imports,
2039    unused_qualifications,
2040    clippy::derivable_impls,
2041    clippy::match_single_binding,
2042    clippy::uninlined_format_args,
2043    clippy::doc_lazy_continuation,
2044    clippy::module_inception
2045)]
2046pub mod __buffa {
2047    #[allow(unused_imports)]
2048    use super::*;
2049    pub mod view {
2050        #[allow(unused_imports)]
2051        use super::*;
2052        /// GetZippedAssetSupplyRequest selects the route-scoped zToken supply series.
2053        #[derive(Clone, Debug, Default)]
2054        pub struct GetZippedAssetSupplyRequestView<'a> {
2055            /// Zipped asset route identifier.
2056            ///
2057            /// Field 1: `zipped_asset_id`
2058            pub zipped_asset_id: u32,
2059            /// Standard history window. Defaults to 1 day when unspecified.
2060            ///
2061            /// Field 2: `range`
2062            pub range: ::buffa::EnumValue<super::super::ChainAnalyticsRange>,
2063            /// Optional explicit bucket. Allowed values are 1m, 5m, 10m, 15m, 30m, 1h, 2h, 4h, 8h, 12h, or 1d.
2064            /// Valid buckets depend on range to keep chart payloads near 1k points.
2065            /// When omitted, the server picks the default bucket for the selected range.
2066            ///
2067            /// Field 3: `bucket`
2068            pub bucket: &'a str,
2069            /// Optional inclusive start timestamp in seconds since Unix epoch.
2070            ///
2071            /// Field 4: `start_ts_sec`
2072            pub start_ts_sec: u32,
2073            /// Optional inclusive end timestamp in seconds since Unix epoch.
2074            ///
2075            /// Field 5: `end_ts_sec`
2076            pub end_ts_sec: u32,
2077            pub __buffa_unknown_fields: ::buffa::UnknownFieldsView<'a>,
2078        }
2079        impl<'a> ::buffa::MessageView<'a> for GetZippedAssetSupplyRequestView<'a> {
2080            type Owned = super::super::GetZippedAssetSupplyRequest;
2081            fn decode_view(
2082                buf: &'a [u8],
2083            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
2084                let __limit = ::core::cell::Cell::new(
2085                    ::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT,
2086                );
2087                <Self as ::buffa::MessageView>::decode_view_ctx(
2088                    buf,
2089                    ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit),
2090                )
2091            }
2092            fn decode_view_with_ctx(
2093                buf: &'a [u8],
2094                ctx: ::buffa::DecodeContext<'_>,
2095            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
2096                <Self as ::buffa::MessageView>::decode_view_ctx(buf, ctx)
2097            }
2098            fn merge_view_field(
2099                &mut self,
2100                tag: ::buffa::encoding::Tag,
2101                cur: &'a [u8],
2102                before_tag: &'a [u8],
2103                ctx: ::buffa::DecodeContext<'_>,
2104            ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> {
2105                let _ = ctx;
2106                #[allow(unused_variables)]
2107                let view = self;
2108                let mut cur = cur;
2109                match tag.field_number() {
2110                    1u32 => {
2111                        ::buffa::encoding::check_wire_type(
2112                            tag,
2113                            ::buffa::encoding::WireType::Varint,
2114                        )?;
2115                        view.zipped_asset_id = ::buffa::types::decode_uint32(&mut cur)?;
2116                    }
2117                    2u32 => {
2118                        ::buffa::encoding::check_wire_type(
2119                            tag,
2120                            ::buffa::encoding::WireType::Varint,
2121                        )?;
2122                        view.range = ::buffa::EnumValue::from(
2123                            ::buffa::types::decode_int32(&mut cur)?,
2124                        );
2125                    }
2126                    3u32 => {
2127                        ::buffa::encoding::check_wire_type(
2128                            tag,
2129                            ::buffa::encoding::WireType::LengthDelimited,
2130                        )?;
2131                        view.bucket = ::buffa::types::borrow_str(&mut cur)?;
2132                    }
2133                    4u32 => {
2134                        ::buffa::encoding::check_wire_type(
2135                            tag,
2136                            ::buffa::encoding::WireType::Fixed32,
2137                        )?;
2138                        view.start_ts_sec = ::buffa::types::decode_fixed32(&mut cur)?;
2139                    }
2140                    5u32 => {
2141                        ::buffa::encoding::check_wire_type(
2142                            tag,
2143                            ::buffa::encoding::WireType::Fixed32,
2144                        )?;
2145                        view.end_ts_sec = ::buffa::types::decode_fixed32(&mut cur)?;
2146                    }
2147                    _ => {
2148                        ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?;
2149                        let span_len = before_tag.len() - cur.len();
2150                        view.__buffa_unknown_fields
2151                            .push_record(before_tag, span_len, ctx)?;
2152                    }
2153                }
2154                ::core::result::Result::Ok(cur)
2155            }
2156            fn to_owned_message(
2157                &self,
2158            ) -> ::core::result::Result<
2159                super::super::GetZippedAssetSupplyRequest,
2160                ::buffa::DecodeError,
2161            > {
2162                self.to_owned_from_source(None)
2163            }
2164            #[allow(clippy::useless_conversion, clippy::needless_update)]
2165            fn to_owned_from_source(
2166                &self,
2167                __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>,
2168            ) -> ::core::result::Result<
2169                super::super::GetZippedAssetSupplyRequest,
2170                ::buffa::DecodeError,
2171            > {
2172                #[allow(unused_imports)]
2173                use ::buffa::alloc::string::ToString as _;
2174                let _ = __buffa_src;
2175                ::core::result::Result::Ok(super::super::GetZippedAssetSupplyRequest {
2176                    zipped_asset_id: self.zipped_asset_id,
2177                    range: self.range,
2178                    bucket: self.bucket.to_string(),
2179                    start_ts_sec: self.start_ts_sec,
2180                    end_ts_sec: self.end_ts_sec,
2181                    __buffa_unknown_fields: self
2182                        .__buffa_unknown_fields
2183                        .to_owned()?
2184                        .into(),
2185                    ..::core::default::Default::default()
2186                })
2187            }
2188        }
2189        impl<'a> ::buffa::ViewEncode<'a> for GetZippedAssetSupplyRequestView<'a> {
2190            #[allow(clippy::needless_borrow, clippy::let_and_return)]
2191            fn compute_size(&self, _cache: &mut ::buffa::SizeCache) -> u32 {
2192                #[allow(unused_imports)]
2193                use ::buffa::Enumeration as _;
2194                let mut size = 0u32;
2195                if self.zipped_asset_id != 0u32 {
2196                    size
2197                        += 1u32
2198                            + ::buffa::types::uint32_encoded_len(self.zipped_asset_id)
2199                                as u32;
2200                }
2201                {
2202                    let val = self.range.to_i32();
2203                    if val != 0 {
2204                        size += 1u32 + ::buffa::types::int32_encoded_len(val) as u32;
2205                    }
2206                }
2207                if !self.bucket.is_empty() {
2208                    size
2209                        += 1u32
2210                            + ::buffa::types::string_encoded_len(&self.bucket) as u32;
2211                }
2212                if self.start_ts_sec != 0u32 {
2213                    size += 1u32 + ::buffa::types::FIXED32_ENCODED_LEN as u32;
2214                }
2215                if self.end_ts_sec != 0u32 {
2216                    size += 1u32 + ::buffa::types::FIXED32_ENCODED_LEN as u32;
2217                }
2218                size += self.__buffa_unknown_fields.encoded_len() as u32;
2219                size
2220            }
2221            #[allow(clippy::needless_borrow)]
2222            fn write_to(
2223                &self,
2224                _cache: &mut ::buffa::SizeCache,
2225                buf: &mut impl ::buffa::bytes::BufMut,
2226            ) {
2227                #[allow(unused_imports)]
2228                use ::buffa::Enumeration as _;
2229                if self.zipped_asset_id != 0u32 {
2230                    ::buffa::types::put_uint32_field(1u32, self.zipped_asset_id, buf);
2231                }
2232                {
2233                    let val = self.range.to_i32();
2234                    if val != 0 {
2235                        ::buffa::types::put_int32_field(2u32, val, buf);
2236                    }
2237                }
2238                if !self.bucket.is_empty() {
2239                    ::buffa::types::put_string_field(3u32, &self.bucket, buf);
2240                }
2241                if self.start_ts_sec != 0u32 {
2242                    ::buffa::types::put_fixed32_field(4u32, self.start_ts_sec, buf);
2243                }
2244                if self.end_ts_sec != 0u32 {
2245                    ::buffa::types::put_fixed32_field(5u32, self.end_ts_sec, buf);
2246                }
2247                self.__buffa_unknown_fields.write_to(buf);
2248            }
2249        }
2250        /// Serializes this view as protobuf JSON.
2251        ///
2252        /// Implicit-presence fields with default values are omitted, `required`
2253        /// fields are always emitted, explicit-presence (`optional`) fields are
2254        /// emitted only when set, bytes fields are base64-encoded, and enum
2255        /// values are their proto name strings.
2256        ///
2257        /// This impl uses `serialize_map(None)` because the number of emitted
2258        /// fields depends on default-omission rules; serializers that require
2259        /// known map lengths (e.g. `bincode`) will return a runtime error.
2260        /// Use the owned message type for those formats.
2261        impl<'__a> ::serde::Serialize for GetZippedAssetSupplyRequestView<'__a> {
2262            fn serialize<__S: ::serde::Serializer>(
2263                &self,
2264                __s: __S,
2265            ) -> ::core::result::Result<__S::Ok, __S::Error> {
2266                use ::serde::ser::SerializeMap as _;
2267                let mut __map = __s.serialize_map(::core::option::Option::None)?;
2268                if !::buffa::json_helpers::skip_if::is_zero_u32(&self.zipped_asset_id) {
2269                    __map
2270                        .serialize_entry(
2271                            "zippedAssetId",
2272                            &::buffa::json_helpers::ProtoJson(&self.zipped_asset_id),
2273                        )?;
2274                }
2275                if !::buffa::json_helpers::skip_if::is_default_enum_value(&self.range) {
2276                    __map.serialize_entry("range", &self.range)?;
2277                }
2278                if !::buffa::json_helpers::skip_if::is_empty_str(self.bucket) {
2279                    __map.serialize_entry("bucket", self.bucket)?;
2280                }
2281                if !::buffa::json_helpers::skip_if::is_zero_u32(&self.start_ts_sec) {
2282                    __map
2283                        .serialize_entry(
2284                            "startTsSec",
2285                            &::buffa::json_helpers::ProtoJson(&self.start_ts_sec),
2286                        )?;
2287                }
2288                if !::buffa::json_helpers::skip_if::is_zero_u32(&self.end_ts_sec) {
2289                    __map
2290                        .serialize_entry(
2291                            "endTsSec",
2292                            &::buffa::json_helpers::ProtoJson(&self.end_ts_sec),
2293                        )?;
2294                }
2295                __map.end()
2296            }
2297        }
2298        impl<'a> ::buffa::MessageName for GetZippedAssetSupplyRequestView<'a> {
2299            const PACKAGE: &'static str = "chain.analytics.v1";
2300            const NAME: &'static str = "GetZippedAssetSupplyRequest";
2301            const FULL_NAME: &'static str = "chain.analytics.v1.GetZippedAssetSupplyRequest";
2302            const TYPE_URL: &'static str = "type.googleapis.com/chain.analytics.v1.GetZippedAssetSupplyRequest";
2303        }
2304        ::buffa::impl_default_view_instance!(GetZippedAssetSupplyRequestView);
2305        ::buffa::impl_view_reborrow!(GetZippedAssetSupplyRequestView);
2306        /** Self-contained, `'static` owned view of a `GetZippedAssetSupplyRequest` message.
2307
2308 Wraps [`::buffa::OwnedView`]`<`[`GetZippedAssetSupplyRequestView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required.
2309
2310 Field accessors return borrows tied to `&self`. Use [`Self::view`] to get the full [`GetZippedAssetSupplyRequestView`] when you need struct patterns, iteration helpers, or to pass the view to lifetime-parameterised code.*/
2311        #[derive(Clone, Debug)]
2312        pub struct GetZippedAssetSupplyRequestOwnedView(
2313            ::buffa::OwnedView<GetZippedAssetSupplyRequestView<'static>>,
2314        );
2315        impl GetZippedAssetSupplyRequestOwnedView {
2316            /// Decode an owned view from a [`::buffa::bytes::Bytes`] buffer.
2317            ///
2318            /// The view borrows directly from the buffer's data; the buffer is
2319            /// retained inside the returned handle.
2320            ///
2321            /// # Errors
2322            ///
2323            /// Returns [`::buffa::DecodeError`] if the buffer contains invalid
2324            /// protobuf data.
2325            pub fn decode(
2326                bytes: ::buffa::bytes::Bytes,
2327            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
2328                ::core::result::Result::Ok(
2329                    GetZippedAssetSupplyRequestOwnedView(
2330                        ::buffa::OwnedView::decode(bytes)?,
2331                    ),
2332                )
2333            }
2334            /// Decode with custom [`::buffa::DecodeOptions`] (recursion limit,
2335            /// max message size).
2336            ///
2337            /// # Errors
2338            ///
2339            /// Returns [`::buffa::DecodeError`] if the buffer is invalid or
2340            /// exceeds the configured limits.
2341            pub fn decode_with_options(
2342                bytes: ::buffa::bytes::Bytes,
2343                opts: &::buffa::DecodeOptions,
2344            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
2345                ::core::result::Result::Ok(
2346                    GetZippedAssetSupplyRequestOwnedView(
2347                        ::buffa::OwnedView::decode_with_options(bytes, opts)?,
2348                    ),
2349                )
2350            }
2351            /// Build from an owned message via an encode → decode round-trip.
2352            ///
2353            /// # Errors
2354            ///
2355            /// Returns [`::buffa::DecodeError`] if the re-encoded bytes are
2356            /// somehow invalid (should not happen for well-formed messages).
2357            pub fn from_owned(
2358                msg: &super::super::GetZippedAssetSupplyRequest,
2359            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
2360                ::core::result::Result::Ok(
2361                    GetZippedAssetSupplyRequestOwnedView(
2362                        ::buffa::OwnedView::from_owned(msg)?,
2363                    ),
2364                )
2365            }
2366            /// Borrow the full [`GetZippedAssetSupplyRequestView`] with its lifetime tied to `&self`.
2367            #[must_use]
2368            pub fn view(&self) -> &GetZippedAssetSupplyRequestView<'_> {
2369                self.0.reborrow()
2370            }
2371            /// Convert to the owned message type.
2372            ///
2373            /// # Errors
2374            ///
2375            /// Returns an error if re-materializing preserved unknown fields
2376            /// fails (e.g. the unknown-field limit is exceeded).
2377            pub fn to_owned_message(
2378                &self,
2379            ) -> ::core::result::Result<
2380                super::super::GetZippedAssetSupplyRequest,
2381                ::buffa::DecodeError,
2382            > {
2383                self.0.to_owned_message()
2384            }
2385            /// The underlying bytes buffer.
2386            #[must_use]
2387            pub fn bytes(&self) -> &::buffa::bytes::Bytes {
2388                self.0.bytes()
2389            }
2390            /// Consume the handle, returning the underlying bytes buffer.
2391            #[must_use]
2392            pub fn into_bytes(self) -> ::buffa::bytes::Bytes {
2393                self.0.into_bytes()
2394            }
2395            /// Zipped asset route identifier.
2396            ///
2397            /// Field 1: `zipped_asset_id`
2398            #[must_use]
2399            pub fn zipped_asset_id(&self) -> u32 {
2400                self.0.reborrow().zipped_asset_id
2401            }
2402            /// Standard history window. Defaults to 1 day when unspecified.
2403            ///
2404            /// Field 2: `range`
2405            #[must_use]
2406            pub fn range(
2407                &self,
2408            ) -> ::buffa::EnumValue<super::super::ChainAnalyticsRange> {
2409                self.0.reborrow().range
2410            }
2411            /// Optional explicit bucket. Allowed values are 1m, 5m, 10m, 15m, 30m, 1h, 2h, 4h, 8h, 12h, or 1d.
2412            /// Valid buckets depend on range to keep chart payloads near 1k points.
2413            /// When omitted, the server picks the default bucket for the selected range.
2414            ///
2415            /// Field 3: `bucket`
2416            #[must_use]
2417            pub fn bucket(&self) -> &'_ str {
2418                self.0.reborrow().bucket
2419            }
2420            /// Optional inclusive start timestamp in seconds since Unix epoch.
2421            ///
2422            /// Field 4: `start_ts_sec`
2423            #[must_use]
2424            pub fn start_ts_sec(&self) -> u32 {
2425                self.0.reborrow().start_ts_sec
2426            }
2427            /// Optional inclusive end timestamp in seconds since Unix epoch.
2428            ///
2429            /// Field 5: `end_ts_sec`
2430            #[must_use]
2431            pub fn end_ts_sec(&self) -> u32 {
2432                self.0.reborrow().end_ts_sec
2433            }
2434        }
2435        impl ::core::convert::From<
2436            ::buffa::OwnedView<GetZippedAssetSupplyRequestView<'static>>,
2437        > for GetZippedAssetSupplyRequestOwnedView {
2438            fn from(
2439                inner: ::buffa::OwnedView<GetZippedAssetSupplyRequestView<'static>>,
2440            ) -> Self {
2441                GetZippedAssetSupplyRequestOwnedView(inner)
2442            }
2443        }
2444        impl ::core::convert::From<GetZippedAssetSupplyRequestOwnedView>
2445        for ::buffa::OwnedView<GetZippedAssetSupplyRequestView<'static>> {
2446            fn from(wrapper: GetZippedAssetSupplyRequestOwnedView) -> Self {
2447                wrapper.0
2448            }
2449        }
2450        impl ::core::convert::AsRef<
2451            ::buffa::OwnedView<GetZippedAssetSupplyRequestView<'static>>,
2452        > for GetZippedAssetSupplyRequestOwnedView {
2453            fn as_ref(
2454                &self,
2455            ) -> &::buffa::OwnedView<GetZippedAssetSupplyRequestView<'static>> {
2456                &self.0
2457            }
2458        }
2459        impl ::buffa::HasMessageView for super::super::GetZippedAssetSupplyRequest {
2460            type View<'a> = GetZippedAssetSupplyRequestView<'a>;
2461            type ViewHandle = GetZippedAssetSupplyRequestOwnedView;
2462        }
2463        impl ::serde::Serialize for GetZippedAssetSupplyRequestOwnedView {
2464            fn serialize<__S: ::serde::Serializer>(
2465                &self,
2466                __s: __S,
2467            ) -> ::core::result::Result<__S::Ok, __S::Error> {
2468                ::serde::Serialize::serialize(&self.0, __s)
2469            }
2470        }
2471        /// GetZippedAssetSupplyResponse returns zipped asset supply chart columns.
2472        #[derive(Clone, Debug, Default)]
2473        pub struct GetZippedAssetSupplyResponseView<'a> {
2474            /// Zipped asset route identifier.
2475            ///
2476            /// Field 1: `zipped_asset_id`
2477            pub zipped_asset_id: u32,
2478            /// Resolved history window.
2479            ///
2480            /// Field 2: `range`
2481            pub range: ::buffa::EnumValue<super::super::ChainAnalyticsRange>,
2482            /// Resolved bucket duration.
2483            ///
2484            /// Field 3: `bucket`
2485            pub bucket: &'a str,
2486            /// First bucket timestamp in seconds since Unix epoch.
2487            ///
2488            /// Field 4: `start_ts_sec`
2489            pub start_ts_sec: u32,
2490            /// Last bucket timestamp in seconds since Unix epoch.
2491            ///
2492            /// Field 5: `end_ts_sec`
2493            pub end_ts_sec: u32,
2494            /// Number of buckets represented by each value column.
2495            ///
2496            /// Field 6: `points`
2497            pub points: u32,
2498            /// Total zToken supply per bucket scaled by the unified asset's
2499            /// AssetConfig.quantity_scale from SpotConfig for this zipped asset.
2500            /// Decode: total_supply_q / 10^quantity_scale.
2501            ///
2502            /// Field 7: `total_supply_q`
2503            pub total_supply_q: ::buffa::RepeatedView<'a, u64>,
2504            pub __buffa_unknown_fields: ::buffa::UnknownFieldsView<'a>,
2505        }
2506        impl<'a> ::buffa::MessageView<'a> for GetZippedAssetSupplyResponseView<'a> {
2507            type Owned = super::super::GetZippedAssetSupplyResponse;
2508            fn decode_view(
2509                buf: &'a [u8],
2510            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
2511                let __limit = ::core::cell::Cell::new(
2512                    ::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT,
2513                );
2514                <Self as ::buffa::MessageView>::decode_view_ctx(
2515                    buf,
2516                    ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit),
2517                )
2518            }
2519            fn decode_view_with_ctx(
2520                buf: &'a [u8],
2521                ctx: ::buffa::DecodeContext<'_>,
2522            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
2523                <Self as ::buffa::MessageView>::decode_view_ctx(buf, ctx)
2524            }
2525            fn merge_view_field(
2526                &mut self,
2527                tag: ::buffa::encoding::Tag,
2528                cur: &'a [u8],
2529                before_tag: &'a [u8],
2530                ctx: ::buffa::DecodeContext<'_>,
2531            ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> {
2532                let _ = ctx;
2533                #[allow(unused_variables)]
2534                let view = self;
2535                let mut cur = cur;
2536                match tag.field_number() {
2537                    1u32 => {
2538                        ::buffa::encoding::check_wire_type(
2539                            tag,
2540                            ::buffa::encoding::WireType::Varint,
2541                        )?;
2542                        view.zipped_asset_id = ::buffa::types::decode_uint32(&mut cur)?;
2543                    }
2544                    2u32 => {
2545                        ::buffa::encoding::check_wire_type(
2546                            tag,
2547                            ::buffa::encoding::WireType::Varint,
2548                        )?;
2549                        view.range = ::buffa::EnumValue::from(
2550                            ::buffa::types::decode_int32(&mut cur)?,
2551                        );
2552                    }
2553                    3u32 => {
2554                        ::buffa::encoding::check_wire_type(
2555                            tag,
2556                            ::buffa::encoding::WireType::LengthDelimited,
2557                        )?;
2558                        view.bucket = ::buffa::types::borrow_str(&mut cur)?;
2559                    }
2560                    4u32 => {
2561                        ::buffa::encoding::check_wire_type(
2562                            tag,
2563                            ::buffa::encoding::WireType::Fixed32,
2564                        )?;
2565                        view.start_ts_sec = ::buffa::types::decode_fixed32(&mut cur)?;
2566                    }
2567                    5u32 => {
2568                        ::buffa::encoding::check_wire_type(
2569                            tag,
2570                            ::buffa::encoding::WireType::Fixed32,
2571                        )?;
2572                        view.end_ts_sec = ::buffa::types::decode_fixed32(&mut cur)?;
2573                    }
2574                    6u32 => {
2575                        ::buffa::encoding::check_wire_type(
2576                            tag,
2577                            ::buffa::encoding::WireType::Varint,
2578                        )?;
2579                        view.points = ::buffa::types::decode_uint32(&mut cur)?;
2580                    }
2581                    7u32 => {
2582                        if tag.wire_type()
2583                            == ::buffa::encoding::WireType::LengthDelimited
2584                        {
2585                            let payload = ::buffa::types::borrow_bytes(&mut cur)?;
2586                            view.total_supply_q
2587                                .reserve(::buffa::encoding::count_varints(payload));
2588                            let mut pcur: &[u8] = payload;
2589                            while !pcur.is_empty() {
2590                                view.total_supply_q
2591                                    .push(::buffa::types::decode_uint64(&mut pcur)?);
2592                            }
2593                        } else if tag.wire_type() == ::buffa::encoding::WireType::Varint
2594                        {
2595                            view.total_supply_q
2596                                .push(::buffa::types::decode_uint64(&mut cur)?);
2597                        } else {
2598                            return Err(
2599                                ::buffa::encoding::wire_type_mismatch(
2600                                    tag,
2601                                    ::buffa::encoding::WireType::LengthDelimited,
2602                                ),
2603                            );
2604                        }
2605                    }
2606                    _ => {
2607                        ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?;
2608                        let span_len = before_tag.len() - cur.len();
2609                        view.__buffa_unknown_fields
2610                            .push_record(before_tag, span_len, ctx)?;
2611                    }
2612                }
2613                ::core::result::Result::Ok(cur)
2614            }
2615            fn to_owned_message(
2616                &self,
2617            ) -> ::core::result::Result<
2618                super::super::GetZippedAssetSupplyResponse,
2619                ::buffa::DecodeError,
2620            > {
2621                self.to_owned_from_source(None)
2622            }
2623            #[allow(clippy::useless_conversion, clippy::needless_update)]
2624            fn to_owned_from_source(
2625                &self,
2626                __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>,
2627            ) -> ::core::result::Result<
2628                super::super::GetZippedAssetSupplyResponse,
2629                ::buffa::DecodeError,
2630            > {
2631                #[allow(unused_imports)]
2632                use ::buffa::alloc::string::ToString as _;
2633                let _ = __buffa_src;
2634                ::core::result::Result::Ok(super::super::GetZippedAssetSupplyResponse {
2635                    zipped_asset_id: self.zipped_asset_id,
2636                    range: self.range,
2637                    bucket: self.bucket.to_string(),
2638                    start_ts_sec: self.start_ts_sec,
2639                    end_ts_sec: self.end_ts_sec,
2640                    points: self.points,
2641                    total_supply_q: self.total_supply_q.to_vec(),
2642                    __buffa_unknown_fields: self
2643                        .__buffa_unknown_fields
2644                        .to_owned()?
2645                        .into(),
2646                    ..::core::default::Default::default()
2647                })
2648            }
2649        }
2650        impl<'a> ::buffa::ViewEncode<'a> for GetZippedAssetSupplyResponseView<'a> {
2651            #[allow(clippy::needless_borrow, clippy::let_and_return)]
2652            fn compute_size(&self, _cache: &mut ::buffa::SizeCache) -> u32 {
2653                #[allow(unused_imports)]
2654                use ::buffa::Enumeration as _;
2655                let mut size = 0u32;
2656                if self.zipped_asset_id != 0u32 {
2657                    size
2658                        += 1u32
2659                            + ::buffa::types::uint32_encoded_len(self.zipped_asset_id)
2660                                as u32;
2661                }
2662                {
2663                    let val = self.range.to_i32();
2664                    if val != 0 {
2665                        size += 1u32 + ::buffa::types::int32_encoded_len(val) as u32;
2666                    }
2667                }
2668                if !self.bucket.is_empty() {
2669                    size
2670                        += 1u32
2671                            + ::buffa::types::string_encoded_len(&self.bucket) as u32;
2672                }
2673                if self.start_ts_sec != 0u32 {
2674                    size += 1u32 + ::buffa::types::FIXED32_ENCODED_LEN as u32;
2675                }
2676                if self.end_ts_sec != 0u32 {
2677                    size += 1u32 + ::buffa::types::FIXED32_ENCODED_LEN as u32;
2678                }
2679                if self.points != 0u32 {
2680                    size
2681                        += 1u32 + ::buffa::types::uint32_encoded_len(self.points) as u32;
2682                }
2683                if !self.total_supply_q.is_empty() {
2684                    let payload: u32 = self
2685                        .total_supply_q
2686                        .iter()
2687                        .map(|&v| ::buffa::types::uint64_encoded_len(v) as u32)
2688                        .sum::<u32>();
2689                    size
2690                        += 1u32 + ::buffa::encoding::varint_len(payload as u64) as u32
2691                            + payload;
2692                }
2693                size += self.__buffa_unknown_fields.encoded_len() as u32;
2694                size
2695            }
2696            #[allow(clippy::needless_borrow)]
2697            fn write_to(
2698                &self,
2699                _cache: &mut ::buffa::SizeCache,
2700                buf: &mut impl ::buffa::bytes::BufMut,
2701            ) {
2702                #[allow(unused_imports)]
2703                use ::buffa::Enumeration as _;
2704                if self.zipped_asset_id != 0u32 {
2705                    ::buffa::types::put_uint32_field(1u32, self.zipped_asset_id, buf);
2706                }
2707                {
2708                    let val = self.range.to_i32();
2709                    if val != 0 {
2710                        ::buffa::types::put_int32_field(2u32, val, buf);
2711                    }
2712                }
2713                if !self.bucket.is_empty() {
2714                    ::buffa::types::put_string_field(3u32, &self.bucket, buf);
2715                }
2716                if self.start_ts_sec != 0u32 {
2717                    ::buffa::types::put_fixed32_field(4u32, self.start_ts_sec, buf);
2718                }
2719                if self.end_ts_sec != 0u32 {
2720                    ::buffa::types::put_fixed32_field(5u32, self.end_ts_sec, buf);
2721                }
2722                if self.points != 0u32 {
2723                    ::buffa::types::put_uint32_field(6u32, self.points, buf);
2724                }
2725                if !self.total_supply_q.is_empty() {
2726                    let payload: u32 = self
2727                        .total_supply_q
2728                        .iter()
2729                        .map(|&v| ::buffa::types::uint64_encoded_len(v) as u32)
2730                        .sum::<u32>();
2731                    ::buffa::types::put_len_delimited_header(7u32, payload, buf);
2732                    for &v in &self.total_supply_q {
2733                        ::buffa::types::encode_uint64(v, buf);
2734                    }
2735                }
2736                self.__buffa_unknown_fields.write_to(buf);
2737            }
2738        }
2739        /// Serializes this view as protobuf JSON.
2740        ///
2741        /// Implicit-presence fields with default values are omitted, `required`
2742        /// fields are always emitted, explicit-presence (`optional`) fields are
2743        /// emitted only when set, bytes fields are base64-encoded, and enum
2744        /// values are their proto name strings.
2745        ///
2746        /// This impl uses `serialize_map(None)` because the number of emitted
2747        /// fields depends on default-omission rules; serializers that require
2748        /// known map lengths (e.g. `bincode`) will return a runtime error.
2749        /// Use the owned message type for those formats.
2750        impl<'__a> ::serde::Serialize for GetZippedAssetSupplyResponseView<'__a> {
2751            fn serialize<__S: ::serde::Serializer>(
2752                &self,
2753                __s: __S,
2754            ) -> ::core::result::Result<__S::Ok, __S::Error> {
2755                use ::serde::ser::SerializeMap as _;
2756                let mut __map = __s.serialize_map(::core::option::Option::None)?;
2757                if !::buffa::json_helpers::skip_if::is_zero_u32(&self.zipped_asset_id) {
2758                    __map
2759                        .serialize_entry(
2760                            "zippedAssetId",
2761                            &::buffa::json_helpers::ProtoJson(&self.zipped_asset_id),
2762                        )?;
2763                }
2764                if !::buffa::json_helpers::skip_if::is_default_enum_value(&self.range) {
2765                    __map.serialize_entry("range", &self.range)?;
2766                }
2767                if !::buffa::json_helpers::skip_if::is_empty_str(self.bucket) {
2768                    __map.serialize_entry("bucket", self.bucket)?;
2769                }
2770                if !::buffa::json_helpers::skip_if::is_zero_u32(&self.start_ts_sec) {
2771                    __map
2772                        .serialize_entry(
2773                            "startTsSec",
2774                            &::buffa::json_helpers::ProtoJson(&self.start_ts_sec),
2775                        )?;
2776                }
2777                if !::buffa::json_helpers::skip_if::is_zero_u32(&self.end_ts_sec) {
2778                    __map
2779                        .serialize_entry(
2780                            "endTsSec",
2781                            &::buffa::json_helpers::ProtoJson(&self.end_ts_sec),
2782                        )?;
2783                }
2784                if !::buffa::json_helpers::skip_if::is_zero_u32(&self.points) {
2785                    __map
2786                        .serialize_entry(
2787                            "points",
2788                            &::buffa::json_helpers::ProtoJson(&self.points),
2789                        )?;
2790                }
2791                if !self.total_supply_q.is_empty() {
2792                    __map
2793                        .serialize_entry(
2794                            "totalSupplyQ",
2795                            &::buffa::json_helpers::RepeatedJson(&self.total_supply_q),
2796                        )?;
2797                }
2798                __map.end()
2799            }
2800        }
2801        impl<'a> ::buffa::MessageName for GetZippedAssetSupplyResponseView<'a> {
2802            const PACKAGE: &'static str = "chain.analytics.v1";
2803            const NAME: &'static str = "GetZippedAssetSupplyResponse";
2804            const FULL_NAME: &'static str = "chain.analytics.v1.GetZippedAssetSupplyResponse";
2805            const TYPE_URL: &'static str = "type.googleapis.com/chain.analytics.v1.GetZippedAssetSupplyResponse";
2806        }
2807        ::buffa::impl_default_view_instance!(GetZippedAssetSupplyResponseView);
2808        ::buffa::impl_view_reborrow!(GetZippedAssetSupplyResponseView);
2809        /** Self-contained, `'static` owned view of a `GetZippedAssetSupplyResponse` message.
2810
2811 Wraps [`::buffa::OwnedView`]`<`[`GetZippedAssetSupplyResponseView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required.
2812
2813 Field accessors return borrows tied to `&self`. Use [`Self::view`] to get the full [`GetZippedAssetSupplyResponseView`] when you need struct patterns, iteration helpers, or to pass the view to lifetime-parameterised code.*/
2814        #[derive(Clone, Debug)]
2815        pub struct GetZippedAssetSupplyResponseOwnedView(
2816            ::buffa::OwnedView<GetZippedAssetSupplyResponseView<'static>>,
2817        );
2818        impl GetZippedAssetSupplyResponseOwnedView {
2819            /// Decode an owned view from a [`::buffa::bytes::Bytes`] buffer.
2820            ///
2821            /// The view borrows directly from the buffer's data; the buffer is
2822            /// retained inside the returned handle.
2823            ///
2824            /// # Errors
2825            ///
2826            /// Returns [`::buffa::DecodeError`] if the buffer contains invalid
2827            /// protobuf data.
2828            pub fn decode(
2829                bytes: ::buffa::bytes::Bytes,
2830            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
2831                ::core::result::Result::Ok(
2832                    GetZippedAssetSupplyResponseOwnedView(
2833                        ::buffa::OwnedView::decode(bytes)?,
2834                    ),
2835                )
2836            }
2837            /// Decode with custom [`::buffa::DecodeOptions`] (recursion limit,
2838            /// max message size).
2839            ///
2840            /// # Errors
2841            ///
2842            /// Returns [`::buffa::DecodeError`] if the buffer is invalid or
2843            /// exceeds the configured limits.
2844            pub fn decode_with_options(
2845                bytes: ::buffa::bytes::Bytes,
2846                opts: &::buffa::DecodeOptions,
2847            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
2848                ::core::result::Result::Ok(
2849                    GetZippedAssetSupplyResponseOwnedView(
2850                        ::buffa::OwnedView::decode_with_options(bytes, opts)?,
2851                    ),
2852                )
2853            }
2854            /// Build from an owned message via an encode → decode round-trip.
2855            ///
2856            /// # Errors
2857            ///
2858            /// Returns [`::buffa::DecodeError`] if the re-encoded bytes are
2859            /// somehow invalid (should not happen for well-formed messages).
2860            pub fn from_owned(
2861                msg: &super::super::GetZippedAssetSupplyResponse,
2862            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
2863                ::core::result::Result::Ok(
2864                    GetZippedAssetSupplyResponseOwnedView(
2865                        ::buffa::OwnedView::from_owned(msg)?,
2866                    ),
2867                )
2868            }
2869            /// Borrow the full [`GetZippedAssetSupplyResponseView`] with its lifetime tied to `&self`.
2870            #[must_use]
2871            pub fn view(&self) -> &GetZippedAssetSupplyResponseView<'_> {
2872                self.0.reborrow()
2873            }
2874            /// Convert to the owned message type.
2875            ///
2876            /// # Errors
2877            ///
2878            /// Returns an error if re-materializing preserved unknown fields
2879            /// fails (e.g. the unknown-field limit is exceeded).
2880            pub fn to_owned_message(
2881                &self,
2882            ) -> ::core::result::Result<
2883                super::super::GetZippedAssetSupplyResponse,
2884                ::buffa::DecodeError,
2885            > {
2886                self.0.to_owned_message()
2887            }
2888            /// The underlying bytes buffer.
2889            #[must_use]
2890            pub fn bytes(&self) -> &::buffa::bytes::Bytes {
2891                self.0.bytes()
2892            }
2893            /// Consume the handle, returning the underlying bytes buffer.
2894            #[must_use]
2895            pub fn into_bytes(self) -> ::buffa::bytes::Bytes {
2896                self.0.into_bytes()
2897            }
2898            /// Zipped asset route identifier.
2899            ///
2900            /// Field 1: `zipped_asset_id`
2901            #[must_use]
2902            pub fn zipped_asset_id(&self) -> u32 {
2903                self.0.reborrow().zipped_asset_id
2904            }
2905            /// Resolved history window.
2906            ///
2907            /// Field 2: `range`
2908            #[must_use]
2909            pub fn range(
2910                &self,
2911            ) -> ::buffa::EnumValue<super::super::ChainAnalyticsRange> {
2912                self.0.reborrow().range
2913            }
2914            /// Resolved bucket duration.
2915            ///
2916            /// Field 3: `bucket`
2917            #[must_use]
2918            pub fn bucket(&self) -> &'_ str {
2919                self.0.reborrow().bucket
2920            }
2921            /// First bucket timestamp in seconds since Unix epoch.
2922            ///
2923            /// Field 4: `start_ts_sec`
2924            #[must_use]
2925            pub fn start_ts_sec(&self) -> u32 {
2926                self.0.reborrow().start_ts_sec
2927            }
2928            /// Last bucket timestamp in seconds since Unix epoch.
2929            ///
2930            /// Field 5: `end_ts_sec`
2931            #[must_use]
2932            pub fn end_ts_sec(&self) -> u32 {
2933                self.0.reborrow().end_ts_sec
2934            }
2935            /// Number of buckets represented by each value column.
2936            ///
2937            /// Field 6: `points`
2938            #[must_use]
2939            pub fn points(&self) -> u32 {
2940                self.0.reborrow().points
2941            }
2942            /// Total zToken supply per bucket scaled by the unified asset's
2943            /// AssetConfig.quantity_scale from SpotConfig for this zipped asset.
2944            /// Decode: total_supply_q / 10^quantity_scale.
2945            ///
2946            /// Field 7: `total_supply_q`
2947            #[must_use]
2948            pub fn total_supply_q(&self) -> &::buffa::RepeatedView<'_, u64> {
2949                &self.0.reborrow().total_supply_q
2950            }
2951        }
2952        impl ::core::convert::From<
2953            ::buffa::OwnedView<GetZippedAssetSupplyResponseView<'static>>,
2954        > for GetZippedAssetSupplyResponseOwnedView {
2955            fn from(
2956                inner: ::buffa::OwnedView<GetZippedAssetSupplyResponseView<'static>>,
2957            ) -> Self {
2958                GetZippedAssetSupplyResponseOwnedView(inner)
2959            }
2960        }
2961        impl ::core::convert::From<GetZippedAssetSupplyResponseOwnedView>
2962        for ::buffa::OwnedView<GetZippedAssetSupplyResponseView<'static>> {
2963            fn from(wrapper: GetZippedAssetSupplyResponseOwnedView) -> Self {
2964                wrapper.0
2965            }
2966        }
2967        impl ::core::convert::AsRef<
2968            ::buffa::OwnedView<GetZippedAssetSupplyResponseView<'static>>,
2969        > for GetZippedAssetSupplyResponseOwnedView {
2970            fn as_ref(
2971                &self,
2972            ) -> &::buffa::OwnedView<GetZippedAssetSupplyResponseView<'static>> {
2973                &self.0
2974            }
2975        }
2976        impl ::buffa::HasMessageView for super::super::GetZippedAssetSupplyResponse {
2977            type View<'a> = GetZippedAssetSupplyResponseView<'a>;
2978            type ViewHandle = GetZippedAssetSupplyResponseOwnedView;
2979        }
2980        impl ::serde::Serialize for GetZippedAssetSupplyResponseOwnedView {
2981            fn serialize<__S: ::serde::Serializer>(
2982                &self,
2983                __s: __S,
2984            ) -> ::core::result::Result<__S::Ok, __S::Error> {
2985                ::serde::Serialize::serialize(&self.0, __s)
2986            }
2987        }
2988        /// ZippedAssetSupplySeries is one zipped asset supply column in a grouped chart.
2989        #[derive(Clone, Debug, Default)]
2990        pub struct ZippedAssetSupplySeriesView<'a> {
2991            /// Zipped asset route identifier.
2992            ///
2993            /// Field 1: `zipped_asset_id`
2994            pub zipped_asset_id: u32,
2995            /// Total zToken supply per bucket scaled by the unified asset's
2996            /// AssetConfig.quantity_scale from SpotConfig for this zipped asset.
2997            /// Decode: total_supply_q / 10^quantity_scale.
2998            ///
2999            /// Field 2: `total_supply_q`
3000            pub total_supply_q: ::buffa::RepeatedView<'a, u64>,
3001            pub __buffa_unknown_fields: ::buffa::UnknownFieldsView<'a>,
3002        }
3003        impl<'a> ::buffa::MessageView<'a> for ZippedAssetSupplySeriesView<'a> {
3004            type Owned = super::super::ZippedAssetSupplySeries;
3005            fn decode_view(
3006                buf: &'a [u8],
3007            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
3008                let __limit = ::core::cell::Cell::new(
3009                    ::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT,
3010                );
3011                <Self as ::buffa::MessageView>::decode_view_ctx(
3012                    buf,
3013                    ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit),
3014                )
3015            }
3016            fn decode_view_with_ctx(
3017                buf: &'a [u8],
3018                ctx: ::buffa::DecodeContext<'_>,
3019            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
3020                <Self as ::buffa::MessageView>::decode_view_ctx(buf, ctx)
3021            }
3022            fn merge_view_field(
3023                &mut self,
3024                tag: ::buffa::encoding::Tag,
3025                cur: &'a [u8],
3026                before_tag: &'a [u8],
3027                ctx: ::buffa::DecodeContext<'_>,
3028            ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> {
3029                let _ = ctx;
3030                #[allow(unused_variables)]
3031                let view = self;
3032                let mut cur = cur;
3033                match tag.field_number() {
3034                    1u32 => {
3035                        ::buffa::encoding::check_wire_type(
3036                            tag,
3037                            ::buffa::encoding::WireType::Varint,
3038                        )?;
3039                        view.zipped_asset_id = ::buffa::types::decode_uint32(&mut cur)?;
3040                    }
3041                    2u32 => {
3042                        if tag.wire_type()
3043                            == ::buffa::encoding::WireType::LengthDelimited
3044                        {
3045                            let payload = ::buffa::types::borrow_bytes(&mut cur)?;
3046                            view.total_supply_q
3047                                .reserve(::buffa::encoding::count_varints(payload));
3048                            let mut pcur: &[u8] = payload;
3049                            while !pcur.is_empty() {
3050                                view.total_supply_q
3051                                    .push(::buffa::types::decode_uint64(&mut pcur)?);
3052                            }
3053                        } else if tag.wire_type() == ::buffa::encoding::WireType::Varint
3054                        {
3055                            view.total_supply_q
3056                                .push(::buffa::types::decode_uint64(&mut cur)?);
3057                        } else {
3058                            return Err(
3059                                ::buffa::encoding::wire_type_mismatch(
3060                                    tag,
3061                                    ::buffa::encoding::WireType::LengthDelimited,
3062                                ),
3063                            );
3064                        }
3065                    }
3066                    _ => {
3067                        ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?;
3068                        let span_len = before_tag.len() - cur.len();
3069                        view.__buffa_unknown_fields
3070                            .push_record(before_tag, span_len, ctx)?;
3071                    }
3072                }
3073                ::core::result::Result::Ok(cur)
3074            }
3075            fn to_owned_message(
3076                &self,
3077            ) -> ::core::result::Result<
3078                super::super::ZippedAssetSupplySeries,
3079                ::buffa::DecodeError,
3080            > {
3081                self.to_owned_from_source(None)
3082            }
3083            #[allow(clippy::useless_conversion, clippy::needless_update)]
3084            fn to_owned_from_source(
3085                &self,
3086                __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>,
3087            ) -> ::core::result::Result<
3088                super::super::ZippedAssetSupplySeries,
3089                ::buffa::DecodeError,
3090            > {
3091                #[allow(unused_imports)]
3092                use ::buffa::alloc::string::ToString as _;
3093                let _ = __buffa_src;
3094                ::core::result::Result::Ok(super::super::ZippedAssetSupplySeries {
3095                    zipped_asset_id: self.zipped_asset_id,
3096                    total_supply_q: self.total_supply_q.to_vec(),
3097                    __buffa_unknown_fields: self
3098                        .__buffa_unknown_fields
3099                        .to_owned()?
3100                        .into(),
3101                    ..::core::default::Default::default()
3102                })
3103            }
3104        }
3105        impl<'a> ::buffa::ViewEncode<'a> for ZippedAssetSupplySeriesView<'a> {
3106            #[allow(clippy::needless_borrow, clippy::let_and_return)]
3107            fn compute_size(&self, _cache: &mut ::buffa::SizeCache) -> u32 {
3108                #[allow(unused_imports)]
3109                use ::buffa::Enumeration as _;
3110                let mut size = 0u32;
3111                if self.zipped_asset_id != 0u32 {
3112                    size
3113                        += 1u32
3114                            + ::buffa::types::uint32_encoded_len(self.zipped_asset_id)
3115                                as u32;
3116                }
3117                if !self.total_supply_q.is_empty() {
3118                    let payload: u32 = self
3119                        .total_supply_q
3120                        .iter()
3121                        .map(|&v| ::buffa::types::uint64_encoded_len(v) as u32)
3122                        .sum::<u32>();
3123                    size
3124                        += 1u32 + ::buffa::encoding::varint_len(payload as u64) as u32
3125                            + payload;
3126                }
3127                size += self.__buffa_unknown_fields.encoded_len() as u32;
3128                size
3129            }
3130            #[allow(clippy::needless_borrow)]
3131            fn write_to(
3132                &self,
3133                _cache: &mut ::buffa::SizeCache,
3134                buf: &mut impl ::buffa::bytes::BufMut,
3135            ) {
3136                #[allow(unused_imports)]
3137                use ::buffa::Enumeration as _;
3138                if self.zipped_asset_id != 0u32 {
3139                    ::buffa::types::put_uint32_field(1u32, self.zipped_asset_id, buf);
3140                }
3141                if !self.total_supply_q.is_empty() {
3142                    let payload: u32 = self
3143                        .total_supply_q
3144                        .iter()
3145                        .map(|&v| ::buffa::types::uint64_encoded_len(v) as u32)
3146                        .sum::<u32>();
3147                    ::buffa::types::put_len_delimited_header(2u32, payload, buf);
3148                    for &v in &self.total_supply_q {
3149                        ::buffa::types::encode_uint64(v, buf);
3150                    }
3151                }
3152                self.__buffa_unknown_fields.write_to(buf);
3153            }
3154        }
3155        /// Serializes this view as protobuf JSON.
3156        ///
3157        /// Implicit-presence fields with default values are omitted, `required`
3158        /// fields are always emitted, explicit-presence (`optional`) fields are
3159        /// emitted only when set, bytes fields are base64-encoded, and enum
3160        /// values are their proto name strings.
3161        ///
3162        /// This impl uses `serialize_map(None)` because the number of emitted
3163        /// fields depends on default-omission rules; serializers that require
3164        /// known map lengths (e.g. `bincode`) will return a runtime error.
3165        /// Use the owned message type for those formats.
3166        impl<'__a> ::serde::Serialize for ZippedAssetSupplySeriesView<'__a> {
3167            fn serialize<__S: ::serde::Serializer>(
3168                &self,
3169                __s: __S,
3170            ) -> ::core::result::Result<__S::Ok, __S::Error> {
3171                use ::serde::ser::SerializeMap as _;
3172                let mut __map = __s.serialize_map(::core::option::Option::None)?;
3173                if !::buffa::json_helpers::skip_if::is_zero_u32(&self.zipped_asset_id) {
3174                    __map
3175                        .serialize_entry(
3176                            "zippedAssetId",
3177                            &::buffa::json_helpers::ProtoJson(&self.zipped_asset_id),
3178                        )?;
3179                }
3180                if !self.total_supply_q.is_empty() {
3181                    __map
3182                        .serialize_entry(
3183                            "totalSupplyQ",
3184                            &::buffa::json_helpers::RepeatedJson(&self.total_supply_q),
3185                        )?;
3186                }
3187                __map.end()
3188            }
3189        }
3190        impl<'a> ::buffa::MessageName for ZippedAssetSupplySeriesView<'a> {
3191            const PACKAGE: &'static str = "chain.analytics.v1";
3192            const NAME: &'static str = "ZippedAssetSupplySeries";
3193            const FULL_NAME: &'static str = "chain.analytics.v1.ZippedAssetSupplySeries";
3194            const TYPE_URL: &'static str = "type.googleapis.com/chain.analytics.v1.ZippedAssetSupplySeries";
3195        }
3196        ::buffa::impl_default_view_instance!(ZippedAssetSupplySeriesView);
3197        ::buffa::impl_view_reborrow!(ZippedAssetSupplySeriesView);
3198        /** Self-contained, `'static` owned view of a `ZippedAssetSupplySeries` message.
3199
3200 Wraps [`::buffa::OwnedView`]`<`[`ZippedAssetSupplySeriesView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required.
3201
3202 Field accessors return borrows tied to `&self`. Use [`Self::view`] to get the full [`ZippedAssetSupplySeriesView`] when you need struct patterns, iteration helpers, or to pass the view to lifetime-parameterised code.*/
3203        #[derive(Clone, Debug)]
3204        pub struct ZippedAssetSupplySeriesOwnedView(
3205            ::buffa::OwnedView<ZippedAssetSupplySeriesView<'static>>,
3206        );
3207        impl ZippedAssetSupplySeriesOwnedView {
3208            /// Decode an owned view from a [`::buffa::bytes::Bytes`] buffer.
3209            ///
3210            /// The view borrows directly from the buffer's data; the buffer is
3211            /// retained inside the returned handle.
3212            ///
3213            /// # Errors
3214            ///
3215            /// Returns [`::buffa::DecodeError`] if the buffer contains invalid
3216            /// protobuf data.
3217            pub fn decode(
3218                bytes: ::buffa::bytes::Bytes,
3219            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
3220                ::core::result::Result::Ok(
3221                    ZippedAssetSupplySeriesOwnedView(::buffa::OwnedView::decode(bytes)?),
3222                )
3223            }
3224            /// Decode with custom [`::buffa::DecodeOptions`] (recursion limit,
3225            /// max message size).
3226            ///
3227            /// # Errors
3228            ///
3229            /// Returns [`::buffa::DecodeError`] if the buffer is invalid or
3230            /// exceeds the configured limits.
3231            pub fn decode_with_options(
3232                bytes: ::buffa::bytes::Bytes,
3233                opts: &::buffa::DecodeOptions,
3234            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
3235                ::core::result::Result::Ok(
3236                    ZippedAssetSupplySeriesOwnedView(
3237                        ::buffa::OwnedView::decode_with_options(bytes, opts)?,
3238                    ),
3239                )
3240            }
3241            /// Build from an owned message via an encode → decode round-trip.
3242            ///
3243            /// # Errors
3244            ///
3245            /// Returns [`::buffa::DecodeError`] if the re-encoded bytes are
3246            /// somehow invalid (should not happen for well-formed messages).
3247            pub fn from_owned(
3248                msg: &super::super::ZippedAssetSupplySeries,
3249            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
3250                ::core::result::Result::Ok(
3251                    ZippedAssetSupplySeriesOwnedView(
3252                        ::buffa::OwnedView::from_owned(msg)?,
3253                    ),
3254                )
3255            }
3256            /// Borrow the full [`ZippedAssetSupplySeriesView`] with its lifetime tied to `&self`.
3257            #[must_use]
3258            pub fn view(&self) -> &ZippedAssetSupplySeriesView<'_> {
3259                self.0.reborrow()
3260            }
3261            /// Convert to the owned message type.
3262            ///
3263            /// # Errors
3264            ///
3265            /// Returns an error if re-materializing preserved unknown fields
3266            /// fails (e.g. the unknown-field limit is exceeded).
3267            pub fn to_owned_message(
3268                &self,
3269            ) -> ::core::result::Result<
3270                super::super::ZippedAssetSupplySeries,
3271                ::buffa::DecodeError,
3272            > {
3273                self.0.to_owned_message()
3274            }
3275            /// The underlying bytes buffer.
3276            #[must_use]
3277            pub fn bytes(&self) -> &::buffa::bytes::Bytes {
3278                self.0.bytes()
3279            }
3280            /// Consume the handle, returning the underlying bytes buffer.
3281            #[must_use]
3282            pub fn into_bytes(self) -> ::buffa::bytes::Bytes {
3283                self.0.into_bytes()
3284            }
3285            /// Zipped asset route identifier.
3286            ///
3287            /// Field 1: `zipped_asset_id`
3288            #[must_use]
3289            pub fn zipped_asset_id(&self) -> u32 {
3290                self.0.reborrow().zipped_asset_id
3291            }
3292            /// Total zToken supply per bucket scaled by the unified asset's
3293            /// AssetConfig.quantity_scale from SpotConfig for this zipped asset.
3294            /// Decode: total_supply_q / 10^quantity_scale.
3295            ///
3296            /// Field 2: `total_supply_q`
3297            #[must_use]
3298            pub fn total_supply_q(&self) -> &::buffa::RepeatedView<'_, u64> {
3299                &self.0.reborrow().total_supply_q
3300            }
3301        }
3302        impl ::core::convert::From<
3303            ::buffa::OwnedView<ZippedAssetSupplySeriesView<'static>>,
3304        > for ZippedAssetSupplySeriesOwnedView {
3305            fn from(
3306                inner: ::buffa::OwnedView<ZippedAssetSupplySeriesView<'static>>,
3307            ) -> Self {
3308                ZippedAssetSupplySeriesOwnedView(inner)
3309            }
3310        }
3311        impl ::core::convert::From<ZippedAssetSupplySeriesOwnedView>
3312        for ::buffa::OwnedView<ZippedAssetSupplySeriesView<'static>> {
3313            fn from(wrapper: ZippedAssetSupplySeriesOwnedView) -> Self {
3314                wrapper.0
3315            }
3316        }
3317        impl ::core::convert::AsRef<
3318            ::buffa::OwnedView<ZippedAssetSupplySeriesView<'static>>,
3319        > for ZippedAssetSupplySeriesOwnedView {
3320            fn as_ref(
3321                &self,
3322            ) -> &::buffa::OwnedView<ZippedAssetSupplySeriesView<'static>> {
3323                &self.0
3324            }
3325        }
3326        impl ::buffa::HasMessageView for super::super::ZippedAssetSupplySeries {
3327            type View<'a> = ZippedAssetSupplySeriesView<'a>;
3328            type ViewHandle = ZippedAssetSupplySeriesOwnedView;
3329        }
3330        impl ::serde::Serialize for ZippedAssetSupplySeriesOwnedView {
3331            fn serialize<__S: ::serde::Serializer>(
3332                &self,
3333                __s: __S,
3334            ) -> ::core::result::Result<__S::Ok, __S::Error> {
3335                ::serde::Serialize::serialize(&self.0, __s)
3336            }
3337        }
3338        /// GetZippedAssetSupplyGroupRequest selects all zipped asset routes in one asset group.
3339        #[derive(Clone, Debug, Default)]
3340        pub struct GetZippedAssetSupplyGroupRequestView<'a> {
3341            /// Zipped asset group identifier.
3342            ///
3343            /// Field 1: `group_id`
3344            pub group_id: &'a str,
3345            /// Standard history window. Defaults to 1 day when unspecified.
3346            ///
3347            /// Field 2: `range`
3348            pub range: ::buffa::EnumValue<super::super::ChainAnalyticsRange>,
3349            /// Optional explicit bucket. Allowed values are 1m, 5m, 10m, 15m, 30m, 1h, 2h, 4h, 8h, 12h, or 1d.
3350            /// Valid buckets depend on range to keep chart payloads near 1k points.
3351            /// When omitted, the server picks the default bucket for the selected range.
3352            ///
3353            /// Field 3: `bucket`
3354            pub bucket: &'a str,
3355            /// Optional inclusive start timestamp in seconds since Unix epoch.
3356            ///
3357            /// Field 4: `start_ts_sec`
3358            pub start_ts_sec: u32,
3359            /// Optional inclusive end timestamp in seconds since Unix epoch.
3360            ///
3361            /// Field 5: `end_ts_sec`
3362            pub end_ts_sec: u32,
3363            pub __buffa_unknown_fields: ::buffa::UnknownFieldsView<'a>,
3364        }
3365        impl<'a> ::buffa::MessageView<'a> for GetZippedAssetSupplyGroupRequestView<'a> {
3366            type Owned = super::super::GetZippedAssetSupplyGroupRequest;
3367            fn decode_view(
3368                buf: &'a [u8],
3369            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
3370                let __limit = ::core::cell::Cell::new(
3371                    ::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT,
3372                );
3373                <Self as ::buffa::MessageView>::decode_view_ctx(
3374                    buf,
3375                    ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit),
3376                )
3377            }
3378            fn decode_view_with_ctx(
3379                buf: &'a [u8],
3380                ctx: ::buffa::DecodeContext<'_>,
3381            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
3382                <Self as ::buffa::MessageView>::decode_view_ctx(buf, ctx)
3383            }
3384            fn merge_view_field(
3385                &mut self,
3386                tag: ::buffa::encoding::Tag,
3387                cur: &'a [u8],
3388                before_tag: &'a [u8],
3389                ctx: ::buffa::DecodeContext<'_>,
3390            ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> {
3391                let _ = ctx;
3392                #[allow(unused_variables)]
3393                let view = self;
3394                let mut cur = cur;
3395                match tag.field_number() {
3396                    1u32 => {
3397                        ::buffa::encoding::check_wire_type(
3398                            tag,
3399                            ::buffa::encoding::WireType::LengthDelimited,
3400                        )?;
3401                        view.group_id = ::buffa::types::borrow_str(&mut cur)?;
3402                    }
3403                    2u32 => {
3404                        ::buffa::encoding::check_wire_type(
3405                            tag,
3406                            ::buffa::encoding::WireType::Varint,
3407                        )?;
3408                        view.range = ::buffa::EnumValue::from(
3409                            ::buffa::types::decode_int32(&mut cur)?,
3410                        );
3411                    }
3412                    3u32 => {
3413                        ::buffa::encoding::check_wire_type(
3414                            tag,
3415                            ::buffa::encoding::WireType::LengthDelimited,
3416                        )?;
3417                        view.bucket = ::buffa::types::borrow_str(&mut cur)?;
3418                    }
3419                    4u32 => {
3420                        ::buffa::encoding::check_wire_type(
3421                            tag,
3422                            ::buffa::encoding::WireType::Fixed32,
3423                        )?;
3424                        view.start_ts_sec = ::buffa::types::decode_fixed32(&mut cur)?;
3425                    }
3426                    5u32 => {
3427                        ::buffa::encoding::check_wire_type(
3428                            tag,
3429                            ::buffa::encoding::WireType::Fixed32,
3430                        )?;
3431                        view.end_ts_sec = ::buffa::types::decode_fixed32(&mut cur)?;
3432                    }
3433                    _ => {
3434                        ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?;
3435                        let span_len = before_tag.len() - cur.len();
3436                        view.__buffa_unknown_fields
3437                            .push_record(before_tag, span_len, ctx)?;
3438                    }
3439                }
3440                ::core::result::Result::Ok(cur)
3441            }
3442            fn to_owned_message(
3443                &self,
3444            ) -> ::core::result::Result<
3445                super::super::GetZippedAssetSupplyGroupRequest,
3446                ::buffa::DecodeError,
3447            > {
3448                self.to_owned_from_source(None)
3449            }
3450            #[allow(clippy::useless_conversion, clippy::needless_update)]
3451            fn to_owned_from_source(
3452                &self,
3453                __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>,
3454            ) -> ::core::result::Result<
3455                super::super::GetZippedAssetSupplyGroupRequest,
3456                ::buffa::DecodeError,
3457            > {
3458                #[allow(unused_imports)]
3459                use ::buffa::alloc::string::ToString as _;
3460                let _ = __buffa_src;
3461                ::core::result::Result::Ok(super::super::GetZippedAssetSupplyGroupRequest {
3462                    group_id: self.group_id.to_string(),
3463                    range: self.range,
3464                    bucket: self.bucket.to_string(),
3465                    start_ts_sec: self.start_ts_sec,
3466                    end_ts_sec: self.end_ts_sec,
3467                    __buffa_unknown_fields: self
3468                        .__buffa_unknown_fields
3469                        .to_owned()?
3470                        .into(),
3471                    ..::core::default::Default::default()
3472                })
3473            }
3474        }
3475        impl<'a> ::buffa::ViewEncode<'a> for GetZippedAssetSupplyGroupRequestView<'a> {
3476            #[allow(clippy::needless_borrow, clippy::let_and_return)]
3477            fn compute_size(&self, _cache: &mut ::buffa::SizeCache) -> u32 {
3478                #[allow(unused_imports)]
3479                use ::buffa::Enumeration as _;
3480                let mut size = 0u32;
3481                if !self.group_id.is_empty() {
3482                    size
3483                        += 1u32
3484                            + ::buffa::types::string_encoded_len(&self.group_id) as u32;
3485                }
3486                {
3487                    let val = self.range.to_i32();
3488                    if val != 0 {
3489                        size += 1u32 + ::buffa::types::int32_encoded_len(val) as u32;
3490                    }
3491                }
3492                if !self.bucket.is_empty() {
3493                    size
3494                        += 1u32
3495                            + ::buffa::types::string_encoded_len(&self.bucket) as u32;
3496                }
3497                if self.start_ts_sec != 0u32 {
3498                    size += 1u32 + ::buffa::types::FIXED32_ENCODED_LEN as u32;
3499                }
3500                if self.end_ts_sec != 0u32 {
3501                    size += 1u32 + ::buffa::types::FIXED32_ENCODED_LEN as u32;
3502                }
3503                size += self.__buffa_unknown_fields.encoded_len() as u32;
3504                size
3505            }
3506            #[allow(clippy::needless_borrow)]
3507            fn write_to(
3508                &self,
3509                _cache: &mut ::buffa::SizeCache,
3510                buf: &mut impl ::buffa::bytes::BufMut,
3511            ) {
3512                #[allow(unused_imports)]
3513                use ::buffa::Enumeration as _;
3514                if !self.group_id.is_empty() {
3515                    ::buffa::types::put_string_field(1u32, &self.group_id, buf);
3516                }
3517                {
3518                    let val = self.range.to_i32();
3519                    if val != 0 {
3520                        ::buffa::types::put_int32_field(2u32, val, buf);
3521                    }
3522                }
3523                if !self.bucket.is_empty() {
3524                    ::buffa::types::put_string_field(3u32, &self.bucket, buf);
3525                }
3526                if self.start_ts_sec != 0u32 {
3527                    ::buffa::types::put_fixed32_field(4u32, self.start_ts_sec, buf);
3528                }
3529                if self.end_ts_sec != 0u32 {
3530                    ::buffa::types::put_fixed32_field(5u32, self.end_ts_sec, buf);
3531                }
3532                self.__buffa_unknown_fields.write_to(buf);
3533            }
3534        }
3535        /// Serializes this view as protobuf JSON.
3536        ///
3537        /// Implicit-presence fields with default values are omitted, `required`
3538        /// fields are always emitted, explicit-presence (`optional`) fields are
3539        /// emitted only when set, bytes fields are base64-encoded, and enum
3540        /// values are their proto name strings.
3541        ///
3542        /// This impl uses `serialize_map(None)` because the number of emitted
3543        /// fields depends on default-omission rules; serializers that require
3544        /// known map lengths (e.g. `bincode`) will return a runtime error.
3545        /// Use the owned message type for those formats.
3546        impl<'__a> ::serde::Serialize for GetZippedAssetSupplyGroupRequestView<'__a> {
3547            fn serialize<__S: ::serde::Serializer>(
3548                &self,
3549                __s: __S,
3550            ) -> ::core::result::Result<__S::Ok, __S::Error> {
3551                use ::serde::ser::SerializeMap as _;
3552                let mut __map = __s.serialize_map(::core::option::Option::None)?;
3553                if !::buffa::json_helpers::skip_if::is_empty_str(self.group_id) {
3554                    __map.serialize_entry("groupId", self.group_id)?;
3555                }
3556                if !::buffa::json_helpers::skip_if::is_default_enum_value(&self.range) {
3557                    __map.serialize_entry("range", &self.range)?;
3558                }
3559                if !::buffa::json_helpers::skip_if::is_empty_str(self.bucket) {
3560                    __map.serialize_entry("bucket", self.bucket)?;
3561                }
3562                if !::buffa::json_helpers::skip_if::is_zero_u32(&self.start_ts_sec) {
3563                    __map
3564                        .serialize_entry(
3565                            "startTsSec",
3566                            &::buffa::json_helpers::ProtoJson(&self.start_ts_sec),
3567                        )?;
3568                }
3569                if !::buffa::json_helpers::skip_if::is_zero_u32(&self.end_ts_sec) {
3570                    __map
3571                        .serialize_entry(
3572                            "endTsSec",
3573                            &::buffa::json_helpers::ProtoJson(&self.end_ts_sec),
3574                        )?;
3575                }
3576                __map.end()
3577            }
3578        }
3579        impl<'a> ::buffa::MessageName for GetZippedAssetSupplyGroupRequestView<'a> {
3580            const PACKAGE: &'static str = "chain.analytics.v1";
3581            const NAME: &'static str = "GetZippedAssetSupplyGroupRequest";
3582            const FULL_NAME: &'static str = "chain.analytics.v1.GetZippedAssetSupplyGroupRequest";
3583            const TYPE_URL: &'static str = "type.googleapis.com/chain.analytics.v1.GetZippedAssetSupplyGroupRequest";
3584        }
3585        ::buffa::impl_default_view_instance!(GetZippedAssetSupplyGroupRequestView);
3586        ::buffa::impl_view_reborrow!(GetZippedAssetSupplyGroupRequestView);
3587        /** Self-contained, `'static` owned view of a `GetZippedAssetSupplyGroupRequest` message.
3588
3589 Wraps [`::buffa::OwnedView`]`<`[`GetZippedAssetSupplyGroupRequestView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required.
3590
3591 Field accessors return borrows tied to `&self`. Use [`Self::view`] to get the full [`GetZippedAssetSupplyGroupRequestView`] when you need struct patterns, iteration helpers, or to pass the view to lifetime-parameterised code.*/
3592        #[derive(Clone, Debug)]
3593        pub struct GetZippedAssetSupplyGroupRequestOwnedView(
3594            ::buffa::OwnedView<GetZippedAssetSupplyGroupRequestView<'static>>,
3595        );
3596        impl GetZippedAssetSupplyGroupRequestOwnedView {
3597            /// Decode an owned view from a [`::buffa::bytes::Bytes`] buffer.
3598            ///
3599            /// The view borrows directly from the buffer's data; the buffer is
3600            /// retained inside the returned handle.
3601            ///
3602            /// # Errors
3603            ///
3604            /// Returns [`::buffa::DecodeError`] if the buffer contains invalid
3605            /// protobuf data.
3606            pub fn decode(
3607                bytes: ::buffa::bytes::Bytes,
3608            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
3609                ::core::result::Result::Ok(
3610                    GetZippedAssetSupplyGroupRequestOwnedView(
3611                        ::buffa::OwnedView::decode(bytes)?,
3612                    ),
3613                )
3614            }
3615            /// Decode with custom [`::buffa::DecodeOptions`] (recursion limit,
3616            /// max message size).
3617            ///
3618            /// # Errors
3619            ///
3620            /// Returns [`::buffa::DecodeError`] if the buffer is invalid or
3621            /// exceeds the configured limits.
3622            pub fn decode_with_options(
3623                bytes: ::buffa::bytes::Bytes,
3624                opts: &::buffa::DecodeOptions,
3625            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
3626                ::core::result::Result::Ok(
3627                    GetZippedAssetSupplyGroupRequestOwnedView(
3628                        ::buffa::OwnedView::decode_with_options(bytes, opts)?,
3629                    ),
3630                )
3631            }
3632            /// Build from an owned message via an encode → decode round-trip.
3633            ///
3634            /// # Errors
3635            ///
3636            /// Returns [`::buffa::DecodeError`] if the re-encoded bytes are
3637            /// somehow invalid (should not happen for well-formed messages).
3638            pub fn from_owned(
3639                msg: &super::super::GetZippedAssetSupplyGroupRequest,
3640            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
3641                ::core::result::Result::Ok(
3642                    GetZippedAssetSupplyGroupRequestOwnedView(
3643                        ::buffa::OwnedView::from_owned(msg)?,
3644                    ),
3645                )
3646            }
3647            /// Borrow the full [`GetZippedAssetSupplyGroupRequestView`] with its lifetime tied to `&self`.
3648            #[must_use]
3649            pub fn view(&self) -> &GetZippedAssetSupplyGroupRequestView<'_> {
3650                self.0.reborrow()
3651            }
3652            /// Convert to the owned message type.
3653            ///
3654            /// # Errors
3655            ///
3656            /// Returns an error if re-materializing preserved unknown fields
3657            /// fails (e.g. the unknown-field limit is exceeded).
3658            pub fn to_owned_message(
3659                &self,
3660            ) -> ::core::result::Result<
3661                super::super::GetZippedAssetSupplyGroupRequest,
3662                ::buffa::DecodeError,
3663            > {
3664                self.0.to_owned_message()
3665            }
3666            /// The underlying bytes buffer.
3667            #[must_use]
3668            pub fn bytes(&self) -> &::buffa::bytes::Bytes {
3669                self.0.bytes()
3670            }
3671            /// Consume the handle, returning the underlying bytes buffer.
3672            #[must_use]
3673            pub fn into_bytes(self) -> ::buffa::bytes::Bytes {
3674                self.0.into_bytes()
3675            }
3676            /// Zipped asset group identifier.
3677            ///
3678            /// Field 1: `group_id`
3679            #[must_use]
3680            pub fn group_id(&self) -> &'_ str {
3681                self.0.reborrow().group_id
3682            }
3683            /// Standard history window. Defaults to 1 day when unspecified.
3684            ///
3685            /// Field 2: `range`
3686            #[must_use]
3687            pub fn range(
3688                &self,
3689            ) -> ::buffa::EnumValue<super::super::ChainAnalyticsRange> {
3690                self.0.reborrow().range
3691            }
3692            /// Optional explicit bucket. Allowed values are 1m, 5m, 10m, 15m, 30m, 1h, 2h, 4h, 8h, 12h, or 1d.
3693            /// Valid buckets depend on range to keep chart payloads near 1k points.
3694            /// When omitted, the server picks the default bucket for the selected range.
3695            ///
3696            /// Field 3: `bucket`
3697            #[must_use]
3698            pub fn bucket(&self) -> &'_ str {
3699                self.0.reborrow().bucket
3700            }
3701            /// Optional inclusive start timestamp in seconds since Unix epoch.
3702            ///
3703            /// Field 4: `start_ts_sec`
3704            #[must_use]
3705            pub fn start_ts_sec(&self) -> u32 {
3706                self.0.reborrow().start_ts_sec
3707            }
3708            /// Optional inclusive end timestamp in seconds since Unix epoch.
3709            ///
3710            /// Field 5: `end_ts_sec`
3711            #[must_use]
3712            pub fn end_ts_sec(&self) -> u32 {
3713                self.0.reborrow().end_ts_sec
3714            }
3715        }
3716        impl ::core::convert::From<
3717            ::buffa::OwnedView<GetZippedAssetSupplyGroupRequestView<'static>>,
3718        > for GetZippedAssetSupplyGroupRequestOwnedView {
3719            fn from(
3720                inner: ::buffa::OwnedView<GetZippedAssetSupplyGroupRequestView<'static>>,
3721            ) -> Self {
3722                GetZippedAssetSupplyGroupRequestOwnedView(inner)
3723            }
3724        }
3725        impl ::core::convert::From<GetZippedAssetSupplyGroupRequestOwnedView>
3726        for ::buffa::OwnedView<GetZippedAssetSupplyGroupRequestView<'static>> {
3727            fn from(wrapper: GetZippedAssetSupplyGroupRequestOwnedView) -> Self {
3728                wrapper.0
3729            }
3730        }
3731        impl ::core::convert::AsRef<
3732            ::buffa::OwnedView<GetZippedAssetSupplyGroupRequestView<'static>>,
3733        > for GetZippedAssetSupplyGroupRequestOwnedView {
3734            fn as_ref(
3735                &self,
3736            ) -> &::buffa::OwnedView<GetZippedAssetSupplyGroupRequestView<'static>> {
3737                &self.0
3738            }
3739        }
3740        impl ::buffa::HasMessageView for super::super::GetZippedAssetSupplyGroupRequest {
3741            type View<'a> = GetZippedAssetSupplyGroupRequestView<'a>;
3742            type ViewHandle = GetZippedAssetSupplyGroupRequestOwnedView;
3743        }
3744        impl ::serde::Serialize for GetZippedAssetSupplyGroupRequestOwnedView {
3745            fn serialize<__S: ::serde::Serializer>(
3746                &self,
3747                __s: __S,
3748            ) -> ::core::result::Result<__S::Ok, __S::Error> {
3749                ::serde::Serialize::serialize(&self.0, __s)
3750            }
3751        }
3752        /// GetZippedAssetSupplyGroupResponse returns grouped zipped asset supply chart columns.
3753        #[derive(Clone, Debug, Default)]
3754        pub struct GetZippedAssetSupplyGroupResponseView<'a> {
3755            /// Zipped asset group identifier.
3756            ///
3757            /// Field 1: `group_id`
3758            pub group_id: &'a str,
3759            /// Resolved history window.
3760            ///
3761            /// Field 2: `range`
3762            pub range: ::buffa::EnumValue<super::super::ChainAnalyticsRange>,
3763            /// Resolved bucket duration.
3764            ///
3765            /// Field 3: `bucket`
3766            pub bucket: &'a str,
3767            /// First bucket timestamp in seconds since Unix epoch.
3768            ///
3769            /// Field 4: `start_ts_sec`
3770            pub start_ts_sec: u32,
3771            /// Last bucket timestamp in seconds since Unix epoch.
3772            ///
3773            /// Field 5: `end_ts_sec`
3774            pub end_ts_sec: u32,
3775            /// Number of buckets represented by each value column.
3776            ///
3777            /// Field 6: `points`
3778            pub points: u32,
3779            /// One supply column per zipped asset route in the group.
3780            ///
3781            /// Field 7: `series`
3782            pub series: ::buffa::RepeatedView<
3783                'a,
3784                super::super::__buffa::view::ZippedAssetSupplySeriesView<'a>,
3785            >,
3786            pub __buffa_unknown_fields: ::buffa::UnknownFieldsView<'a>,
3787        }
3788        impl<'a> ::buffa::MessageView<'a> for GetZippedAssetSupplyGroupResponseView<'a> {
3789            type Owned = super::super::GetZippedAssetSupplyGroupResponse;
3790            fn decode_view(
3791                buf: &'a [u8],
3792            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
3793                let __limit = ::core::cell::Cell::new(
3794                    ::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT,
3795                );
3796                <Self as ::buffa::MessageView>::decode_view_ctx(
3797                    buf,
3798                    ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit),
3799                )
3800            }
3801            fn decode_view_with_ctx(
3802                buf: &'a [u8],
3803                ctx: ::buffa::DecodeContext<'_>,
3804            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
3805                <Self as ::buffa::MessageView>::decode_view_ctx(buf, ctx)
3806            }
3807            fn merge_view_field(
3808                &mut self,
3809                tag: ::buffa::encoding::Tag,
3810                cur: &'a [u8],
3811                before_tag: &'a [u8],
3812                ctx: ::buffa::DecodeContext<'_>,
3813            ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> {
3814                let _ = ctx;
3815                #[allow(unused_variables)]
3816                let view = self;
3817                let mut cur = cur;
3818                match tag.field_number() {
3819                    1u32 => {
3820                        ::buffa::encoding::check_wire_type(
3821                            tag,
3822                            ::buffa::encoding::WireType::LengthDelimited,
3823                        )?;
3824                        view.group_id = ::buffa::types::borrow_str(&mut cur)?;
3825                    }
3826                    2u32 => {
3827                        ::buffa::encoding::check_wire_type(
3828                            tag,
3829                            ::buffa::encoding::WireType::Varint,
3830                        )?;
3831                        view.range = ::buffa::EnumValue::from(
3832                            ::buffa::types::decode_int32(&mut cur)?,
3833                        );
3834                    }
3835                    3u32 => {
3836                        ::buffa::encoding::check_wire_type(
3837                            tag,
3838                            ::buffa::encoding::WireType::LengthDelimited,
3839                        )?;
3840                        view.bucket = ::buffa::types::borrow_str(&mut cur)?;
3841                    }
3842                    4u32 => {
3843                        ::buffa::encoding::check_wire_type(
3844                            tag,
3845                            ::buffa::encoding::WireType::Fixed32,
3846                        )?;
3847                        view.start_ts_sec = ::buffa::types::decode_fixed32(&mut cur)?;
3848                    }
3849                    5u32 => {
3850                        ::buffa::encoding::check_wire_type(
3851                            tag,
3852                            ::buffa::encoding::WireType::Fixed32,
3853                        )?;
3854                        view.end_ts_sec = ::buffa::types::decode_fixed32(&mut cur)?;
3855                    }
3856                    6u32 => {
3857                        ::buffa::encoding::check_wire_type(
3858                            tag,
3859                            ::buffa::encoding::WireType::Varint,
3860                        )?;
3861                        view.points = ::buffa::types::decode_uint32(&mut cur)?;
3862                    }
3863                    7u32 => {
3864                        ::buffa::encoding::check_wire_type(
3865                            tag,
3866                            ::buffa::encoding::WireType::LengthDelimited,
3867                        )?;
3868                        let __sub_ctx = ctx.descend()?;
3869                        let sub = ::buffa::types::borrow_bytes(&mut cur)?;
3870                        view.series
3871                            .push(
3872                                <super::super::__buffa::view::ZippedAssetSupplySeriesView as ::buffa::MessageView>::decode_view_ctx(
3873                                    sub,
3874                                    __sub_ctx,
3875                                )?,
3876                            );
3877                    }
3878                    _ => {
3879                        ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?;
3880                        let span_len = before_tag.len() - cur.len();
3881                        view.__buffa_unknown_fields
3882                            .push_record(before_tag, span_len, ctx)?;
3883                    }
3884                }
3885                ::core::result::Result::Ok(cur)
3886            }
3887            fn to_owned_message(
3888                &self,
3889            ) -> ::core::result::Result<
3890                super::super::GetZippedAssetSupplyGroupResponse,
3891                ::buffa::DecodeError,
3892            > {
3893                self.to_owned_from_source(None)
3894            }
3895            #[allow(clippy::useless_conversion, clippy::needless_update)]
3896            fn to_owned_from_source(
3897                &self,
3898                __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>,
3899            ) -> ::core::result::Result<
3900                super::super::GetZippedAssetSupplyGroupResponse,
3901                ::buffa::DecodeError,
3902            > {
3903                #[allow(unused_imports)]
3904                use ::buffa::alloc::string::ToString as _;
3905                let _ = __buffa_src;
3906                ::core::result::Result::Ok(super::super::GetZippedAssetSupplyGroupResponse {
3907                    group_id: self.group_id.to_string(),
3908                    range: self.range,
3909                    bucket: self.bucket.to_string(),
3910                    start_ts_sec: self.start_ts_sec,
3911                    end_ts_sec: self.end_ts_sec,
3912                    points: self.points,
3913                    series: self
3914                        .series
3915                        .iter()
3916                        .map(|v| v.to_owned_from_source(__buffa_src))
3917                        .collect::<::core::result::Result<_, ::buffa::DecodeError>>()?,
3918                    __buffa_unknown_fields: self
3919                        .__buffa_unknown_fields
3920                        .to_owned()?
3921                        .into(),
3922                    ..::core::default::Default::default()
3923                })
3924            }
3925        }
3926        impl<'a> ::buffa::ViewEncode<'a> for GetZippedAssetSupplyGroupResponseView<'a> {
3927            #[allow(clippy::needless_borrow, clippy::let_and_return)]
3928            fn compute_size(&self, __cache: &mut ::buffa::SizeCache) -> u32 {
3929                #[allow(unused_imports)]
3930                use ::buffa::Enumeration as _;
3931                let mut size = 0u32;
3932                if !self.group_id.is_empty() {
3933                    size
3934                        += 1u32
3935                            + ::buffa::types::string_encoded_len(&self.group_id) as u32;
3936                }
3937                {
3938                    let val = self.range.to_i32();
3939                    if val != 0 {
3940                        size += 1u32 + ::buffa::types::int32_encoded_len(val) as u32;
3941                    }
3942                }
3943                if !self.bucket.is_empty() {
3944                    size
3945                        += 1u32
3946                            + ::buffa::types::string_encoded_len(&self.bucket) as u32;
3947                }
3948                if self.start_ts_sec != 0u32 {
3949                    size += 1u32 + ::buffa::types::FIXED32_ENCODED_LEN as u32;
3950                }
3951                if self.end_ts_sec != 0u32 {
3952                    size += 1u32 + ::buffa::types::FIXED32_ENCODED_LEN as u32;
3953                }
3954                if self.points != 0u32 {
3955                    size
3956                        += 1u32 + ::buffa::types::uint32_encoded_len(self.points) as u32;
3957                }
3958                for v in &self.series {
3959                    let __slot = __cache.reserve();
3960                    let inner_size = v.compute_size(__cache);
3961                    __cache.set(__slot, inner_size);
3962                    size
3963                        += 1u32 + ::buffa::encoding::varint_len(inner_size as u64) as u32
3964                            + inner_size;
3965                }
3966                size += self.__buffa_unknown_fields.encoded_len() as u32;
3967                size
3968            }
3969            #[allow(clippy::needless_borrow)]
3970            fn write_to(
3971                &self,
3972                __cache: &mut ::buffa::SizeCache,
3973                buf: &mut impl ::buffa::bytes::BufMut,
3974            ) {
3975                #[allow(unused_imports)]
3976                use ::buffa::Enumeration as _;
3977                if !self.group_id.is_empty() {
3978                    ::buffa::types::put_string_field(1u32, &self.group_id, buf);
3979                }
3980                {
3981                    let val = self.range.to_i32();
3982                    if val != 0 {
3983                        ::buffa::types::put_int32_field(2u32, val, buf);
3984                    }
3985                }
3986                if !self.bucket.is_empty() {
3987                    ::buffa::types::put_string_field(3u32, &self.bucket, buf);
3988                }
3989                if self.start_ts_sec != 0u32 {
3990                    ::buffa::types::put_fixed32_field(4u32, self.start_ts_sec, buf);
3991                }
3992                if self.end_ts_sec != 0u32 {
3993                    ::buffa::types::put_fixed32_field(5u32, self.end_ts_sec, buf);
3994                }
3995                if self.points != 0u32 {
3996                    ::buffa::types::put_uint32_field(6u32, self.points, buf);
3997                }
3998                for v in &self.series {
3999                    ::buffa::types::put_len_delimited_header(
4000                        7u32,
4001                        __cache.consume_next(),
4002                        buf,
4003                    );
4004                    v.write_to(__cache, buf);
4005                }
4006                self.__buffa_unknown_fields.write_to(buf);
4007            }
4008        }
4009        /// Serializes this view as protobuf JSON.
4010        ///
4011        /// Implicit-presence fields with default values are omitted, `required`
4012        /// fields are always emitted, explicit-presence (`optional`) fields are
4013        /// emitted only when set, bytes fields are base64-encoded, and enum
4014        /// values are their proto name strings.
4015        ///
4016        /// This impl uses `serialize_map(None)` because the number of emitted
4017        /// fields depends on default-omission rules; serializers that require
4018        /// known map lengths (e.g. `bincode`) will return a runtime error.
4019        /// Use the owned message type for those formats.
4020        impl<'__a> ::serde::Serialize for GetZippedAssetSupplyGroupResponseView<'__a> {
4021            fn serialize<__S: ::serde::Serializer>(
4022                &self,
4023                __s: __S,
4024            ) -> ::core::result::Result<__S::Ok, __S::Error> {
4025                use ::serde::ser::SerializeMap as _;
4026                let mut __map = __s.serialize_map(::core::option::Option::None)?;
4027                if !::buffa::json_helpers::skip_if::is_empty_str(self.group_id) {
4028                    __map.serialize_entry("groupId", self.group_id)?;
4029                }
4030                if !::buffa::json_helpers::skip_if::is_default_enum_value(&self.range) {
4031                    __map.serialize_entry("range", &self.range)?;
4032                }
4033                if !::buffa::json_helpers::skip_if::is_empty_str(self.bucket) {
4034                    __map.serialize_entry("bucket", self.bucket)?;
4035                }
4036                if !::buffa::json_helpers::skip_if::is_zero_u32(&self.start_ts_sec) {
4037                    __map
4038                        .serialize_entry(
4039                            "startTsSec",
4040                            &::buffa::json_helpers::ProtoJson(&self.start_ts_sec),
4041                        )?;
4042                }
4043                if !::buffa::json_helpers::skip_if::is_zero_u32(&self.end_ts_sec) {
4044                    __map
4045                        .serialize_entry(
4046                            "endTsSec",
4047                            &::buffa::json_helpers::ProtoJson(&self.end_ts_sec),
4048                        )?;
4049                }
4050                if !::buffa::json_helpers::skip_if::is_zero_u32(&self.points) {
4051                    __map
4052                        .serialize_entry(
4053                            "points",
4054                            &::buffa::json_helpers::ProtoJson(&self.points),
4055                        )?;
4056                }
4057                if !self.series.is_empty() {
4058                    __map.serialize_entry("series", &*self.series)?;
4059                }
4060                __map.end()
4061            }
4062        }
4063        impl<'a> ::buffa::MessageName for GetZippedAssetSupplyGroupResponseView<'a> {
4064            const PACKAGE: &'static str = "chain.analytics.v1";
4065            const NAME: &'static str = "GetZippedAssetSupplyGroupResponse";
4066            const FULL_NAME: &'static str = "chain.analytics.v1.GetZippedAssetSupplyGroupResponse";
4067            const TYPE_URL: &'static str = "type.googleapis.com/chain.analytics.v1.GetZippedAssetSupplyGroupResponse";
4068        }
4069        ::buffa::impl_default_view_instance!(GetZippedAssetSupplyGroupResponseView);
4070        ::buffa::impl_view_reborrow!(GetZippedAssetSupplyGroupResponseView);
4071        /** Self-contained, `'static` owned view of a `GetZippedAssetSupplyGroupResponse` message.
4072
4073 Wraps [`::buffa::OwnedView`]`<`[`GetZippedAssetSupplyGroupResponseView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required.
4074
4075 Field accessors return borrows tied to `&self`. Use [`Self::view`] to get the full [`GetZippedAssetSupplyGroupResponseView`] when you need struct patterns, iteration helpers, or to pass the view to lifetime-parameterised code.*/
4076        #[derive(Clone, Debug)]
4077        pub struct GetZippedAssetSupplyGroupResponseOwnedView(
4078            ::buffa::OwnedView<GetZippedAssetSupplyGroupResponseView<'static>>,
4079        );
4080        impl GetZippedAssetSupplyGroupResponseOwnedView {
4081            /// Decode an owned view from a [`::buffa::bytes::Bytes`] buffer.
4082            ///
4083            /// The view borrows directly from the buffer's data; the buffer is
4084            /// retained inside the returned handle.
4085            ///
4086            /// # Errors
4087            ///
4088            /// Returns [`::buffa::DecodeError`] if the buffer contains invalid
4089            /// protobuf data.
4090            pub fn decode(
4091                bytes: ::buffa::bytes::Bytes,
4092            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
4093                ::core::result::Result::Ok(
4094                    GetZippedAssetSupplyGroupResponseOwnedView(
4095                        ::buffa::OwnedView::decode(bytes)?,
4096                    ),
4097                )
4098            }
4099            /// Decode with custom [`::buffa::DecodeOptions`] (recursion limit,
4100            /// max message size).
4101            ///
4102            /// # Errors
4103            ///
4104            /// Returns [`::buffa::DecodeError`] if the buffer is invalid or
4105            /// exceeds the configured limits.
4106            pub fn decode_with_options(
4107                bytes: ::buffa::bytes::Bytes,
4108                opts: &::buffa::DecodeOptions,
4109            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
4110                ::core::result::Result::Ok(
4111                    GetZippedAssetSupplyGroupResponseOwnedView(
4112                        ::buffa::OwnedView::decode_with_options(bytes, opts)?,
4113                    ),
4114                )
4115            }
4116            /// Build from an owned message via an encode → decode round-trip.
4117            ///
4118            /// # Errors
4119            ///
4120            /// Returns [`::buffa::DecodeError`] if the re-encoded bytes are
4121            /// somehow invalid (should not happen for well-formed messages).
4122            pub fn from_owned(
4123                msg: &super::super::GetZippedAssetSupplyGroupResponse,
4124            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
4125                ::core::result::Result::Ok(
4126                    GetZippedAssetSupplyGroupResponseOwnedView(
4127                        ::buffa::OwnedView::from_owned(msg)?,
4128                    ),
4129                )
4130            }
4131            /// Borrow the full [`GetZippedAssetSupplyGroupResponseView`] with its lifetime tied to `&self`.
4132            #[must_use]
4133            pub fn view(&self) -> &GetZippedAssetSupplyGroupResponseView<'_> {
4134                self.0.reborrow()
4135            }
4136            /// Convert to the owned message type.
4137            ///
4138            /// # Errors
4139            ///
4140            /// Returns an error if re-materializing preserved unknown fields
4141            /// fails (e.g. the unknown-field limit is exceeded).
4142            pub fn to_owned_message(
4143                &self,
4144            ) -> ::core::result::Result<
4145                super::super::GetZippedAssetSupplyGroupResponse,
4146                ::buffa::DecodeError,
4147            > {
4148                self.0.to_owned_message()
4149            }
4150            /// The underlying bytes buffer.
4151            #[must_use]
4152            pub fn bytes(&self) -> &::buffa::bytes::Bytes {
4153                self.0.bytes()
4154            }
4155            /// Consume the handle, returning the underlying bytes buffer.
4156            #[must_use]
4157            pub fn into_bytes(self) -> ::buffa::bytes::Bytes {
4158                self.0.into_bytes()
4159            }
4160            /// Zipped asset group identifier.
4161            ///
4162            /// Field 1: `group_id`
4163            #[must_use]
4164            pub fn group_id(&self) -> &'_ str {
4165                self.0.reborrow().group_id
4166            }
4167            /// Resolved history window.
4168            ///
4169            /// Field 2: `range`
4170            #[must_use]
4171            pub fn range(
4172                &self,
4173            ) -> ::buffa::EnumValue<super::super::ChainAnalyticsRange> {
4174                self.0.reborrow().range
4175            }
4176            /// Resolved bucket duration.
4177            ///
4178            /// Field 3: `bucket`
4179            #[must_use]
4180            pub fn bucket(&self) -> &'_ str {
4181                self.0.reborrow().bucket
4182            }
4183            /// First bucket timestamp in seconds since Unix epoch.
4184            ///
4185            /// Field 4: `start_ts_sec`
4186            #[must_use]
4187            pub fn start_ts_sec(&self) -> u32 {
4188                self.0.reborrow().start_ts_sec
4189            }
4190            /// Last bucket timestamp in seconds since Unix epoch.
4191            ///
4192            /// Field 5: `end_ts_sec`
4193            #[must_use]
4194            pub fn end_ts_sec(&self) -> u32 {
4195                self.0.reborrow().end_ts_sec
4196            }
4197            /// Number of buckets represented by each value column.
4198            ///
4199            /// Field 6: `points`
4200            #[must_use]
4201            pub fn points(&self) -> u32 {
4202                self.0.reborrow().points
4203            }
4204            /// One supply column per zipped asset route in the group.
4205            ///
4206            /// Field 7: `series`
4207            #[must_use]
4208            pub fn series(
4209                &self,
4210            ) -> &::buffa::RepeatedView<
4211                '_,
4212                super::super::__buffa::view::ZippedAssetSupplySeriesView<'_>,
4213            > {
4214                &self.0.reborrow().series
4215            }
4216        }
4217        impl ::core::convert::From<
4218            ::buffa::OwnedView<GetZippedAssetSupplyGroupResponseView<'static>>,
4219        > for GetZippedAssetSupplyGroupResponseOwnedView {
4220            fn from(
4221                inner: ::buffa::OwnedView<GetZippedAssetSupplyGroupResponseView<'static>>,
4222            ) -> Self {
4223                GetZippedAssetSupplyGroupResponseOwnedView(inner)
4224            }
4225        }
4226        impl ::core::convert::From<GetZippedAssetSupplyGroupResponseOwnedView>
4227        for ::buffa::OwnedView<GetZippedAssetSupplyGroupResponseView<'static>> {
4228            fn from(wrapper: GetZippedAssetSupplyGroupResponseOwnedView) -> Self {
4229                wrapper.0
4230            }
4231        }
4232        impl ::core::convert::AsRef<
4233            ::buffa::OwnedView<GetZippedAssetSupplyGroupResponseView<'static>>,
4234        > for GetZippedAssetSupplyGroupResponseOwnedView {
4235            fn as_ref(
4236                &self,
4237            ) -> &::buffa::OwnedView<GetZippedAssetSupplyGroupResponseView<'static>> {
4238                &self.0
4239            }
4240        }
4241        impl ::buffa::HasMessageView
4242        for super::super::GetZippedAssetSupplyGroupResponse {
4243            type View<'a> = GetZippedAssetSupplyGroupResponseView<'a>;
4244            type ViewHandle = GetZippedAssetSupplyGroupResponseOwnedView;
4245        }
4246        impl ::serde::Serialize for GetZippedAssetSupplyGroupResponseOwnedView {
4247            fn serialize<__S: ::serde::Serializer>(
4248                &self,
4249                __s: __S,
4250            ) -> ::core::result::Result<__S::Ok, __S::Error> {
4251                ::serde::Serialize::serialize(&self.0, __s)
4252            }
4253        }
4254        /// GetUnifiedAssetBalancesRequest selects total unified asset balances.
4255        #[derive(Clone, Debug, Default)]
4256        pub struct GetUnifiedAssetBalancesRequestView<'a> {
4257            /// Unified asset identifier.
4258            ///
4259            /// Field 1: `asset_id`
4260            pub asset_id: u32,
4261            /// Standard history window. Defaults to 1 day when unspecified.
4262            ///
4263            /// Field 2: `range`
4264            pub range: ::buffa::EnumValue<super::super::ChainAnalyticsRange>,
4265            /// Optional explicit bucket. Allowed values are 1m, 5m, 10m, 15m, 30m, 1h, 2h, 4h, 8h, 12h, or 1d.
4266            /// Valid buckets depend on range to keep chart payloads near 1k points.
4267            /// When omitted, the server picks the default bucket for the selected range.
4268            ///
4269            /// Field 3: `bucket`
4270            pub bucket: &'a str,
4271            /// Optional inclusive start timestamp in seconds since Unix epoch.
4272            ///
4273            /// Field 4: `start_ts_sec`
4274            pub start_ts_sec: u32,
4275            /// Optional inclusive end timestamp in seconds since Unix epoch.
4276            ///
4277            /// Field 5: `end_ts_sec`
4278            pub end_ts_sec: u32,
4279            pub __buffa_unknown_fields: ::buffa::UnknownFieldsView<'a>,
4280        }
4281        impl<'a> ::buffa::MessageView<'a> for GetUnifiedAssetBalancesRequestView<'a> {
4282            type Owned = super::super::GetUnifiedAssetBalancesRequest;
4283            fn decode_view(
4284                buf: &'a [u8],
4285            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
4286                let __limit = ::core::cell::Cell::new(
4287                    ::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT,
4288                );
4289                <Self as ::buffa::MessageView>::decode_view_ctx(
4290                    buf,
4291                    ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit),
4292                )
4293            }
4294            fn decode_view_with_ctx(
4295                buf: &'a [u8],
4296                ctx: ::buffa::DecodeContext<'_>,
4297            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
4298                <Self as ::buffa::MessageView>::decode_view_ctx(buf, ctx)
4299            }
4300            fn merge_view_field(
4301                &mut self,
4302                tag: ::buffa::encoding::Tag,
4303                cur: &'a [u8],
4304                before_tag: &'a [u8],
4305                ctx: ::buffa::DecodeContext<'_>,
4306            ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> {
4307                let _ = ctx;
4308                #[allow(unused_variables)]
4309                let view = self;
4310                let mut cur = cur;
4311                match tag.field_number() {
4312                    1u32 => {
4313                        ::buffa::encoding::check_wire_type(
4314                            tag,
4315                            ::buffa::encoding::WireType::Varint,
4316                        )?;
4317                        view.asset_id = ::buffa::types::decode_uint32(&mut cur)?;
4318                    }
4319                    2u32 => {
4320                        ::buffa::encoding::check_wire_type(
4321                            tag,
4322                            ::buffa::encoding::WireType::Varint,
4323                        )?;
4324                        view.range = ::buffa::EnumValue::from(
4325                            ::buffa::types::decode_int32(&mut cur)?,
4326                        );
4327                    }
4328                    3u32 => {
4329                        ::buffa::encoding::check_wire_type(
4330                            tag,
4331                            ::buffa::encoding::WireType::LengthDelimited,
4332                        )?;
4333                        view.bucket = ::buffa::types::borrow_str(&mut cur)?;
4334                    }
4335                    4u32 => {
4336                        ::buffa::encoding::check_wire_type(
4337                            tag,
4338                            ::buffa::encoding::WireType::Fixed32,
4339                        )?;
4340                        view.start_ts_sec = ::buffa::types::decode_fixed32(&mut cur)?;
4341                    }
4342                    5u32 => {
4343                        ::buffa::encoding::check_wire_type(
4344                            tag,
4345                            ::buffa::encoding::WireType::Fixed32,
4346                        )?;
4347                        view.end_ts_sec = ::buffa::types::decode_fixed32(&mut cur)?;
4348                    }
4349                    _ => {
4350                        ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?;
4351                        let span_len = before_tag.len() - cur.len();
4352                        view.__buffa_unknown_fields
4353                            .push_record(before_tag, span_len, ctx)?;
4354                    }
4355                }
4356                ::core::result::Result::Ok(cur)
4357            }
4358            fn to_owned_message(
4359                &self,
4360            ) -> ::core::result::Result<
4361                super::super::GetUnifiedAssetBalancesRequest,
4362                ::buffa::DecodeError,
4363            > {
4364                self.to_owned_from_source(None)
4365            }
4366            #[allow(clippy::useless_conversion, clippy::needless_update)]
4367            fn to_owned_from_source(
4368                &self,
4369                __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>,
4370            ) -> ::core::result::Result<
4371                super::super::GetUnifiedAssetBalancesRequest,
4372                ::buffa::DecodeError,
4373            > {
4374                #[allow(unused_imports)]
4375                use ::buffa::alloc::string::ToString as _;
4376                let _ = __buffa_src;
4377                ::core::result::Result::Ok(super::super::GetUnifiedAssetBalancesRequest {
4378                    asset_id: self.asset_id,
4379                    range: self.range,
4380                    bucket: self.bucket.to_string(),
4381                    start_ts_sec: self.start_ts_sec,
4382                    end_ts_sec: self.end_ts_sec,
4383                    __buffa_unknown_fields: self
4384                        .__buffa_unknown_fields
4385                        .to_owned()?
4386                        .into(),
4387                    ..::core::default::Default::default()
4388                })
4389            }
4390        }
4391        impl<'a> ::buffa::ViewEncode<'a> for GetUnifiedAssetBalancesRequestView<'a> {
4392            #[allow(clippy::needless_borrow, clippy::let_and_return)]
4393            fn compute_size(&self, _cache: &mut ::buffa::SizeCache) -> u32 {
4394                #[allow(unused_imports)]
4395                use ::buffa::Enumeration as _;
4396                let mut size = 0u32;
4397                if self.asset_id != 0u32 {
4398                    size
4399                        += 1u32
4400                            + ::buffa::types::uint32_encoded_len(self.asset_id) as u32;
4401                }
4402                {
4403                    let val = self.range.to_i32();
4404                    if val != 0 {
4405                        size += 1u32 + ::buffa::types::int32_encoded_len(val) as u32;
4406                    }
4407                }
4408                if !self.bucket.is_empty() {
4409                    size
4410                        += 1u32
4411                            + ::buffa::types::string_encoded_len(&self.bucket) as u32;
4412                }
4413                if self.start_ts_sec != 0u32 {
4414                    size += 1u32 + ::buffa::types::FIXED32_ENCODED_LEN as u32;
4415                }
4416                if self.end_ts_sec != 0u32 {
4417                    size += 1u32 + ::buffa::types::FIXED32_ENCODED_LEN as u32;
4418                }
4419                size += self.__buffa_unknown_fields.encoded_len() as u32;
4420                size
4421            }
4422            #[allow(clippy::needless_borrow)]
4423            fn write_to(
4424                &self,
4425                _cache: &mut ::buffa::SizeCache,
4426                buf: &mut impl ::buffa::bytes::BufMut,
4427            ) {
4428                #[allow(unused_imports)]
4429                use ::buffa::Enumeration as _;
4430                if self.asset_id != 0u32 {
4431                    ::buffa::types::put_uint32_field(1u32, self.asset_id, buf);
4432                }
4433                {
4434                    let val = self.range.to_i32();
4435                    if val != 0 {
4436                        ::buffa::types::put_int32_field(2u32, val, buf);
4437                    }
4438                }
4439                if !self.bucket.is_empty() {
4440                    ::buffa::types::put_string_field(3u32, &self.bucket, buf);
4441                }
4442                if self.start_ts_sec != 0u32 {
4443                    ::buffa::types::put_fixed32_field(4u32, self.start_ts_sec, buf);
4444                }
4445                if self.end_ts_sec != 0u32 {
4446                    ::buffa::types::put_fixed32_field(5u32, self.end_ts_sec, buf);
4447                }
4448                self.__buffa_unknown_fields.write_to(buf);
4449            }
4450        }
4451        /// Serializes this view as protobuf JSON.
4452        ///
4453        /// Implicit-presence fields with default values are omitted, `required`
4454        /// fields are always emitted, explicit-presence (`optional`) fields are
4455        /// emitted only when set, bytes fields are base64-encoded, and enum
4456        /// values are their proto name strings.
4457        ///
4458        /// This impl uses `serialize_map(None)` because the number of emitted
4459        /// fields depends on default-omission rules; serializers that require
4460        /// known map lengths (e.g. `bincode`) will return a runtime error.
4461        /// Use the owned message type for those formats.
4462        impl<'__a> ::serde::Serialize for GetUnifiedAssetBalancesRequestView<'__a> {
4463            fn serialize<__S: ::serde::Serializer>(
4464                &self,
4465                __s: __S,
4466            ) -> ::core::result::Result<__S::Ok, __S::Error> {
4467                use ::serde::ser::SerializeMap as _;
4468                let mut __map = __s.serialize_map(::core::option::Option::None)?;
4469                if !::buffa::json_helpers::skip_if::is_zero_u32(&self.asset_id) {
4470                    __map
4471                        .serialize_entry(
4472                            "assetId",
4473                            &::buffa::json_helpers::ProtoJson(&self.asset_id),
4474                        )?;
4475                }
4476                if !::buffa::json_helpers::skip_if::is_default_enum_value(&self.range) {
4477                    __map.serialize_entry("range", &self.range)?;
4478                }
4479                if !::buffa::json_helpers::skip_if::is_empty_str(self.bucket) {
4480                    __map.serialize_entry("bucket", self.bucket)?;
4481                }
4482                if !::buffa::json_helpers::skip_if::is_zero_u32(&self.start_ts_sec) {
4483                    __map
4484                        .serialize_entry(
4485                            "startTsSec",
4486                            &::buffa::json_helpers::ProtoJson(&self.start_ts_sec),
4487                        )?;
4488                }
4489                if !::buffa::json_helpers::skip_if::is_zero_u32(&self.end_ts_sec) {
4490                    __map
4491                        .serialize_entry(
4492                            "endTsSec",
4493                            &::buffa::json_helpers::ProtoJson(&self.end_ts_sec),
4494                        )?;
4495                }
4496                __map.end()
4497            }
4498        }
4499        impl<'a> ::buffa::MessageName for GetUnifiedAssetBalancesRequestView<'a> {
4500            const PACKAGE: &'static str = "chain.analytics.v1";
4501            const NAME: &'static str = "GetUnifiedAssetBalancesRequest";
4502            const FULL_NAME: &'static str = "chain.analytics.v1.GetUnifiedAssetBalancesRequest";
4503            const TYPE_URL: &'static str = "type.googleapis.com/chain.analytics.v1.GetUnifiedAssetBalancesRequest";
4504        }
4505        ::buffa::impl_default_view_instance!(GetUnifiedAssetBalancesRequestView);
4506        ::buffa::impl_view_reborrow!(GetUnifiedAssetBalancesRequestView);
4507        /** Self-contained, `'static` owned view of a `GetUnifiedAssetBalancesRequest` message.
4508
4509 Wraps [`::buffa::OwnedView`]`<`[`GetUnifiedAssetBalancesRequestView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required.
4510
4511 Field accessors return borrows tied to `&self`. Use [`Self::view`] to get the full [`GetUnifiedAssetBalancesRequestView`] when you need struct patterns, iteration helpers, or to pass the view to lifetime-parameterised code.*/
4512        #[derive(Clone, Debug)]
4513        pub struct GetUnifiedAssetBalancesRequestOwnedView(
4514            ::buffa::OwnedView<GetUnifiedAssetBalancesRequestView<'static>>,
4515        );
4516        impl GetUnifiedAssetBalancesRequestOwnedView {
4517            /// Decode an owned view from a [`::buffa::bytes::Bytes`] buffer.
4518            ///
4519            /// The view borrows directly from the buffer's data; the buffer is
4520            /// retained inside the returned handle.
4521            ///
4522            /// # Errors
4523            ///
4524            /// Returns [`::buffa::DecodeError`] if the buffer contains invalid
4525            /// protobuf data.
4526            pub fn decode(
4527                bytes: ::buffa::bytes::Bytes,
4528            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
4529                ::core::result::Result::Ok(
4530                    GetUnifiedAssetBalancesRequestOwnedView(
4531                        ::buffa::OwnedView::decode(bytes)?,
4532                    ),
4533                )
4534            }
4535            /// Decode with custom [`::buffa::DecodeOptions`] (recursion limit,
4536            /// max message size).
4537            ///
4538            /// # Errors
4539            ///
4540            /// Returns [`::buffa::DecodeError`] if the buffer is invalid or
4541            /// exceeds the configured limits.
4542            pub fn decode_with_options(
4543                bytes: ::buffa::bytes::Bytes,
4544                opts: &::buffa::DecodeOptions,
4545            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
4546                ::core::result::Result::Ok(
4547                    GetUnifiedAssetBalancesRequestOwnedView(
4548                        ::buffa::OwnedView::decode_with_options(bytes, opts)?,
4549                    ),
4550                )
4551            }
4552            /// Build from an owned message via an encode → decode round-trip.
4553            ///
4554            /// # Errors
4555            ///
4556            /// Returns [`::buffa::DecodeError`] if the re-encoded bytes are
4557            /// somehow invalid (should not happen for well-formed messages).
4558            pub fn from_owned(
4559                msg: &super::super::GetUnifiedAssetBalancesRequest,
4560            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
4561                ::core::result::Result::Ok(
4562                    GetUnifiedAssetBalancesRequestOwnedView(
4563                        ::buffa::OwnedView::from_owned(msg)?,
4564                    ),
4565                )
4566            }
4567            /// Borrow the full [`GetUnifiedAssetBalancesRequestView`] with its lifetime tied to `&self`.
4568            #[must_use]
4569            pub fn view(&self) -> &GetUnifiedAssetBalancesRequestView<'_> {
4570                self.0.reborrow()
4571            }
4572            /// Convert to the owned message type.
4573            ///
4574            /// # Errors
4575            ///
4576            /// Returns an error if re-materializing preserved unknown fields
4577            /// fails (e.g. the unknown-field limit is exceeded).
4578            pub fn to_owned_message(
4579                &self,
4580            ) -> ::core::result::Result<
4581                super::super::GetUnifiedAssetBalancesRequest,
4582                ::buffa::DecodeError,
4583            > {
4584                self.0.to_owned_message()
4585            }
4586            /// The underlying bytes buffer.
4587            #[must_use]
4588            pub fn bytes(&self) -> &::buffa::bytes::Bytes {
4589                self.0.bytes()
4590            }
4591            /// Consume the handle, returning the underlying bytes buffer.
4592            #[must_use]
4593            pub fn into_bytes(self) -> ::buffa::bytes::Bytes {
4594                self.0.into_bytes()
4595            }
4596            /// Unified asset identifier.
4597            ///
4598            /// Field 1: `asset_id`
4599            #[must_use]
4600            pub fn asset_id(&self) -> u32 {
4601                self.0.reborrow().asset_id
4602            }
4603            /// Standard history window. Defaults to 1 day when unspecified.
4604            ///
4605            /// Field 2: `range`
4606            #[must_use]
4607            pub fn range(
4608                &self,
4609            ) -> ::buffa::EnumValue<super::super::ChainAnalyticsRange> {
4610                self.0.reborrow().range
4611            }
4612            /// Optional explicit bucket. Allowed values are 1m, 5m, 10m, 15m, 30m, 1h, 2h, 4h, 8h, 12h, or 1d.
4613            /// Valid buckets depend on range to keep chart payloads near 1k points.
4614            /// When omitted, the server picks the default bucket for the selected range.
4615            ///
4616            /// Field 3: `bucket`
4617            #[must_use]
4618            pub fn bucket(&self) -> &'_ str {
4619                self.0.reborrow().bucket
4620            }
4621            /// Optional inclusive start timestamp in seconds since Unix epoch.
4622            ///
4623            /// Field 4: `start_ts_sec`
4624            #[must_use]
4625            pub fn start_ts_sec(&self) -> u32 {
4626                self.0.reborrow().start_ts_sec
4627            }
4628            /// Optional inclusive end timestamp in seconds since Unix epoch.
4629            ///
4630            /// Field 5: `end_ts_sec`
4631            #[must_use]
4632            pub fn end_ts_sec(&self) -> u32 {
4633                self.0.reborrow().end_ts_sec
4634            }
4635        }
4636        impl ::core::convert::From<
4637            ::buffa::OwnedView<GetUnifiedAssetBalancesRequestView<'static>>,
4638        > for GetUnifiedAssetBalancesRequestOwnedView {
4639            fn from(
4640                inner: ::buffa::OwnedView<GetUnifiedAssetBalancesRequestView<'static>>,
4641            ) -> Self {
4642                GetUnifiedAssetBalancesRequestOwnedView(inner)
4643            }
4644        }
4645        impl ::core::convert::From<GetUnifiedAssetBalancesRequestOwnedView>
4646        for ::buffa::OwnedView<GetUnifiedAssetBalancesRequestView<'static>> {
4647            fn from(wrapper: GetUnifiedAssetBalancesRequestOwnedView) -> Self {
4648                wrapper.0
4649            }
4650        }
4651        impl ::core::convert::AsRef<
4652            ::buffa::OwnedView<GetUnifiedAssetBalancesRequestView<'static>>,
4653        > for GetUnifiedAssetBalancesRequestOwnedView {
4654            fn as_ref(
4655                &self,
4656            ) -> &::buffa::OwnedView<GetUnifiedAssetBalancesRequestView<'static>> {
4657                &self.0
4658            }
4659        }
4660        impl ::buffa::HasMessageView for super::super::GetUnifiedAssetBalancesRequest {
4661            type View<'a> = GetUnifiedAssetBalancesRequestView<'a>;
4662            type ViewHandle = GetUnifiedAssetBalancesRequestOwnedView;
4663        }
4664        impl ::serde::Serialize for GetUnifiedAssetBalancesRequestOwnedView {
4665            fn serialize<__S: ::serde::Serializer>(
4666                &self,
4667                __s: __S,
4668            ) -> ::core::result::Result<__S::Ok, __S::Error> {
4669                ::serde::Serialize::serialize(&self.0, __s)
4670            }
4671        }
4672        /// GetUnifiedAssetBalancesResponse returns unified asset balance chart columns.
4673        #[derive(Clone, Debug, Default)]
4674        pub struct GetUnifiedAssetBalancesResponseView<'a> {
4675            /// Unified asset identifier.
4676            ///
4677            /// Field 1: `asset_id`
4678            pub asset_id: u32,
4679            /// Resolved history window.
4680            ///
4681            /// Field 2: `range`
4682            pub range: ::buffa::EnumValue<super::super::ChainAnalyticsRange>,
4683            /// Resolved bucket duration.
4684            ///
4685            /// Field 3: `bucket`
4686            pub bucket: &'a str,
4687            /// First bucket timestamp in seconds since Unix epoch.
4688            ///
4689            /// Field 4: `start_ts_sec`
4690            pub start_ts_sec: u32,
4691            /// Last bucket timestamp in seconds since Unix epoch.
4692            ///
4693            /// Field 5: `end_ts_sec`
4694            pub end_ts_sec: u32,
4695            /// Number of buckets represented by each value column.
4696            ///
4697            /// Field 6: `points`
4698            pub points: u32,
4699            /// Total unified balance per bucket across public account surfaces, scaled by
4700            /// AssetConfig.quantity_scale from SpotConfig for asset_id.
4701            /// Decode: total_balance_q / 10^quantity_scale.
4702            ///
4703            /// Field 7: `total_balance_q`
4704            pub total_balance_q: ::buffa::RepeatedView<'a, u64>,
4705            pub __buffa_unknown_fields: ::buffa::UnknownFieldsView<'a>,
4706        }
4707        impl<'a> ::buffa::MessageView<'a> for GetUnifiedAssetBalancesResponseView<'a> {
4708            type Owned = super::super::GetUnifiedAssetBalancesResponse;
4709            fn decode_view(
4710                buf: &'a [u8],
4711            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
4712                let __limit = ::core::cell::Cell::new(
4713                    ::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT,
4714                );
4715                <Self as ::buffa::MessageView>::decode_view_ctx(
4716                    buf,
4717                    ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit),
4718                )
4719            }
4720            fn decode_view_with_ctx(
4721                buf: &'a [u8],
4722                ctx: ::buffa::DecodeContext<'_>,
4723            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
4724                <Self as ::buffa::MessageView>::decode_view_ctx(buf, ctx)
4725            }
4726            fn merge_view_field(
4727                &mut self,
4728                tag: ::buffa::encoding::Tag,
4729                cur: &'a [u8],
4730                before_tag: &'a [u8],
4731                ctx: ::buffa::DecodeContext<'_>,
4732            ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> {
4733                let _ = ctx;
4734                #[allow(unused_variables)]
4735                let view = self;
4736                let mut cur = cur;
4737                match tag.field_number() {
4738                    1u32 => {
4739                        ::buffa::encoding::check_wire_type(
4740                            tag,
4741                            ::buffa::encoding::WireType::Varint,
4742                        )?;
4743                        view.asset_id = ::buffa::types::decode_uint32(&mut cur)?;
4744                    }
4745                    2u32 => {
4746                        ::buffa::encoding::check_wire_type(
4747                            tag,
4748                            ::buffa::encoding::WireType::Varint,
4749                        )?;
4750                        view.range = ::buffa::EnumValue::from(
4751                            ::buffa::types::decode_int32(&mut cur)?,
4752                        );
4753                    }
4754                    3u32 => {
4755                        ::buffa::encoding::check_wire_type(
4756                            tag,
4757                            ::buffa::encoding::WireType::LengthDelimited,
4758                        )?;
4759                        view.bucket = ::buffa::types::borrow_str(&mut cur)?;
4760                    }
4761                    4u32 => {
4762                        ::buffa::encoding::check_wire_type(
4763                            tag,
4764                            ::buffa::encoding::WireType::Fixed32,
4765                        )?;
4766                        view.start_ts_sec = ::buffa::types::decode_fixed32(&mut cur)?;
4767                    }
4768                    5u32 => {
4769                        ::buffa::encoding::check_wire_type(
4770                            tag,
4771                            ::buffa::encoding::WireType::Fixed32,
4772                        )?;
4773                        view.end_ts_sec = ::buffa::types::decode_fixed32(&mut cur)?;
4774                    }
4775                    6u32 => {
4776                        ::buffa::encoding::check_wire_type(
4777                            tag,
4778                            ::buffa::encoding::WireType::Varint,
4779                        )?;
4780                        view.points = ::buffa::types::decode_uint32(&mut cur)?;
4781                    }
4782                    7u32 => {
4783                        if tag.wire_type()
4784                            == ::buffa::encoding::WireType::LengthDelimited
4785                        {
4786                            let payload = ::buffa::types::borrow_bytes(&mut cur)?;
4787                            view.total_balance_q
4788                                .reserve(::buffa::encoding::count_varints(payload));
4789                            let mut pcur: &[u8] = payload;
4790                            while !pcur.is_empty() {
4791                                view.total_balance_q
4792                                    .push(::buffa::types::decode_uint64(&mut pcur)?);
4793                            }
4794                        } else if tag.wire_type() == ::buffa::encoding::WireType::Varint
4795                        {
4796                            view.total_balance_q
4797                                .push(::buffa::types::decode_uint64(&mut cur)?);
4798                        } else {
4799                            return Err(
4800                                ::buffa::encoding::wire_type_mismatch(
4801                                    tag,
4802                                    ::buffa::encoding::WireType::LengthDelimited,
4803                                ),
4804                            );
4805                        }
4806                    }
4807                    _ => {
4808                        ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?;
4809                        let span_len = before_tag.len() - cur.len();
4810                        view.__buffa_unknown_fields
4811                            .push_record(before_tag, span_len, ctx)?;
4812                    }
4813                }
4814                ::core::result::Result::Ok(cur)
4815            }
4816            fn to_owned_message(
4817                &self,
4818            ) -> ::core::result::Result<
4819                super::super::GetUnifiedAssetBalancesResponse,
4820                ::buffa::DecodeError,
4821            > {
4822                self.to_owned_from_source(None)
4823            }
4824            #[allow(clippy::useless_conversion, clippy::needless_update)]
4825            fn to_owned_from_source(
4826                &self,
4827                __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>,
4828            ) -> ::core::result::Result<
4829                super::super::GetUnifiedAssetBalancesResponse,
4830                ::buffa::DecodeError,
4831            > {
4832                #[allow(unused_imports)]
4833                use ::buffa::alloc::string::ToString as _;
4834                let _ = __buffa_src;
4835                ::core::result::Result::Ok(super::super::GetUnifiedAssetBalancesResponse {
4836                    asset_id: self.asset_id,
4837                    range: self.range,
4838                    bucket: self.bucket.to_string(),
4839                    start_ts_sec: self.start_ts_sec,
4840                    end_ts_sec: self.end_ts_sec,
4841                    points: self.points,
4842                    total_balance_q: self.total_balance_q.to_vec(),
4843                    __buffa_unknown_fields: self
4844                        .__buffa_unknown_fields
4845                        .to_owned()?
4846                        .into(),
4847                    ..::core::default::Default::default()
4848                })
4849            }
4850        }
4851        impl<'a> ::buffa::ViewEncode<'a> for GetUnifiedAssetBalancesResponseView<'a> {
4852            #[allow(clippy::needless_borrow, clippy::let_and_return)]
4853            fn compute_size(&self, _cache: &mut ::buffa::SizeCache) -> u32 {
4854                #[allow(unused_imports)]
4855                use ::buffa::Enumeration as _;
4856                let mut size = 0u32;
4857                if self.asset_id != 0u32 {
4858                    size
4859                        += 1u32
4860                            + ::buffa::types::uint32_encoded_len(self.asset_id) as u32;
4861                }
4862                {
4863                    let val = self.range.to_i32();
4864                    if val != 0 {
4865                        size += 1u32 + ::buffa::types::int32_encoded_len(val) as u32;
4866                    }
4867                }
4868                if !self.bucket.is_empty() {
4869                    size
4870                        += 1u32
4871                            + ::buffa::types::string_encoded_len(&self.bucket) as u32;
4872                }
4873                if self.start_ts_sec != 0u32 {
4874                    size += 1u32 + ::buffa::types::FIXED32_ENCODED_LEN as u32;
4875                }
4876                if self.end_ts_sec != 0u32 {
4877                    size += 1u32 + ::buffa::types::FIXED32_ENCODED_LEN as u32;
4878                }
4879                if self.points != 0u32 {
4880                    size
4881                        += 1u32 + ::buffa::types::uint32_encoded_len(self.points) as u32;
4882                }
4883                if !self.total_balance_q.is_empty() {
4884                    let payload: u32 = self
4885                        .total_balance_q
4886                        .iter()
4887                        .map(|&v| ::buffa::types::uint64_encoded_len(v) as u32)
4888                        .sum::<u32>();
4889                    size
4890                        += 1u32 + ::buffa::encoding::varint_len(payload as u64) as u32
4891                            + payload;
4892                }
4893                size += self.__buffa_unknown_fields.encoded_len() as u32;
4894                size
4895            }
4896            #[allow(clippy::needless_borrow)]
4897            fn write_to(
4898                &self,
4899                _cache: &mut ::buffa::SizeCache,
4900                buf: &mut impl ::buffa::bytes::BufMut,
4901            ) {
4902                #[allow(unused_imports)]
4903                use ::buffa::Enumeration as _;
4904                if self.asset_id != 0u32 {
4905                    ::buffa::types::put_uint32_field(1u32, self.asset_id, buf);
4906                }
4907                {
4908                    let val = self.range.to_i32();
4909                    if val != 0 {
4910                        ::buffa::types::put_int32_field(2u32, val, buf);
4911                    }
4912                }
4913                if !self.bucket.is_empty() {
4914                    ::buffa::types::put_string_field(3u32, &self.bucket, buf);
4915                }
4916                if self.start_ts_sec != 0u32 {
4917                    ::buffa::types::put_fixed32_field(4u32, self.start_ts_sec, buf);
4918                }
4919                if self.end_ts_sec != 0u32 {
4920                    ::buffa::types::put_fixed32_field(5u32, self.end_ts_sec, buf);
4921                }
4922                if self.points != 0u32 {
4923                    ::buffa::types::put_uint32_field(6u32, self.points, buf);
4924                }
4925                if !self.total_balance_q.is_empty() {
4926                    let payload: u32 = self
4927                        .total_balance_q
4928                        .iter()
4929                        .map(|&v| ::buffa::types::uint64_encoded_len(v) as u32)
4930                        .sum::<u32>();
4931                    ::buffa::types::put_len_delimited_header(7u32, payload, buf);
4932                    for &v in &self.total_balance_q {
4933                        ::buffa::types::encode_uint64(v, buf);
4934                    }
4935                }
4936                self.__buffa_unknown_fields.write_to(buf);
4937            }
4938        }
4939        /// Serializes this view as protobuf JSON.
4940        ///
4941        /// Implicit-presence fields with default values are omitted, `required`
4942        /// fields are always emitted, explicit-presence (`optional`) fields are
4943        /// emitted only when set, bytes fields are base64-encoded, and enum
4944        /// values are their proto name strings.
4945        ///
4946        /// This impl uses `serialize_map(None)` because the number of emitted
4947        /// fields depends on default-omission rules; serializers that require
4948        /// known map lengths (e.g. `bincode`) will return a runtime error.
4949        /// Use the owned message type for those formats.
4950        impl<'__a> ::serde::Serialize for GetUnifiedAssetBalancesResponseView<'__a> {
4951            fn serialize<__S: ::serde::Serializer>(
4952                &self,
4953                __s: __S,
4954            ) -> ::core::result::Result<__S::Ok, __S::Error> {
4955                use ::serde::ser::SerializeMap as _;
4956                let mut __map = __s.serialize_map(::core::option::Option::None)?;
4957                if !::buffa::json_helpers::skip_if::is_zero_u32(&self.asset_id) {
4958                    __map
4959                        .serialize_entry(
4960                            "assetId",
4961                            &::buffa::json_helpers::ProtoJson(&self.asset_id),
4962                        )?;
4963                }
4964                if !::buffa::json_helpers::skip_if::is_default_enum_value(&self.range) {
4965                    __map.serialize_entry("range", &self.range)?;
4966                }
4967                if !::buffa::json_helpers::skip_if::is_empty_str(self.bucket) {
4968                    __map.serialize_entry("bucket", self.bucket)?;
4969                }
4970                if !::buffa::json_helpers::skip_if::is_zero_u32(&self.start_ts_sec) {
4971                    __map
4972                        .serialize_entry(
4973                            "startTsSec",
4974                            &::buffa::json_helpers::ProtoJson(&self.start_ts_sec),
4975                        )?;
4976                }
4977                if !::buffa::json_helpers::skip_if::is_zero_u32(&self.end_ts_sec) {
4978                    __map
4979                        .serialize_entry(
4980                            "endTsSec",
4981                            &::buffa::json_helpers::ProtoJson(&self.end_ts_sec),
4982                        )?;
4983                }
4984                if !::buffa::json_helpers::skip_if::is_zero_u32(&self.points) {
4985                    __map
4986                        .serialize_entry(
4987                            "points",
4988                            &::buffa::json_helpers::ProtoJson(&self.points),
4989                        )?;
4990                }
4991                if !self.total_balance_q.is_empty() {
4992                    __map
4993                        .serialize_entry(
4994                            "totalBalanceQ",
4995                            &::buffa::json_helpers::RepeatedJson(&self.total_balance_q),
4996                        )?;
4997                }
4998                __map.end()
4999            }
5000        }
5001        impl<'a> ::buffa::MessageName for GetUnifiedAssetBalancesResponseView<'a> {
5002            const PACKAGE: &'static str = "chain.analytics.v1";
5003            const NAME: &'static str = "GetUnifiedAssetBalancesResponse";
5004            const FULL_NAME: &'static str = "chain.analytics.v1.GetUnifiedAssetBalancesResponse";
5005            const TYPE_URL: &'static str = "type.googleapis.com/chain.analytics.v1.GetUnifiedAssetBalancesResponse";
5006        }
5007        ::buffa::impl_default_view_instance!(GetUnifiedAssetBalancesResponseView);
5008        ::buffa::impl_view_reborrow!(GetUnifiedAssetBalancesResponseView);
5009        /** Self-contained, `'static` owned view of a `GetUnifiedAssetBalancesResponse` message.
5010
5011 Wraps [`::buffa::OwnedView`]`<`[`GetUnifiedAssetBalancesResponseView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required.
5012
5013 Field accessors return borrows tied to `&self`. Use [`Self::view`] to get the full [`GetUnifiedAssetBalancesResponseView`] when you need struct patterns, iteration helpers, or to pass the view to lifetime-parameterised code.*/
5014        #[derive(Clone, Debug)]
5015        pub struct GetUnifiedAssetBalancesResponseOwnedView(
5016            ::buffa::OwnedView<GetUnifiedAssetBalancesResponseView<'static>>,
5017        );
5018        impl GetUnifiedAssetBalancesResponseOwnedView {
5019            /// Decode an owned view from a [`::buffa::bytes::Bytes`] buffer.
5020            ///
5021            /// The view borrows directly from the buffer's data; the buffer is
5022            /// retained inside the returned handle.
5023            ///
5024            /// # Errors
5025            ///
5026            /// Returns [`::buffa::DecodeError`] if the buffer contains invalid
5027            /// protobuf data.
5028            pub fn decode(
5029                bytes: ::buffa::bytes::Bytes,
5030            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
5031                ::core::result::Result::Ok(
5032                    GetUnifiedAssetBalancesResponseOwnedView(
5033                        ::buffa::OwnedView::decode(bytes)?,
5034                    ),
5035                )
5036            }
5037            /// Decode with custom [`::buffa::DecodeOptions`] (recursion limit,
5038            /// max message size).
5039            ///
5040            /// # Errors
5041            ///
5042            /// Returns [`::buffa::DecodeError`] if the buffer is invalid or
5043            /// exceeds the configured limits.
5044            pub fn decode_with_options(
5045                bytes: ::buffa::bytes::Bytes,
5046                opts: &::buffa::DecodeOptions,
5047            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
5048                ::core::result::Result::Ok(
5049                    GetUnifiedAssetBalancesResponseOwnedView(
5050                        ::buffa::OwnedView::decode_with_options(bytes, opts)?,
5051                    ),
5052                )
5053            }
5054            /// Build from an owned message via an encode → decode round-trip.
5055            ///
5056            /// # Errors
5057            ///
5058            /// Returns [`::buffa::DecodeError`] if the re-encoded bytes are
5059            /// somehow invalid (should not happen for well-formed messages).
5060            pub fn from_owned(
5061                msg: &super::super::GetUnifiedAssetBalancesResponse,
5062            ) -> ::core::result::Result<Self, ::buffa::DecodeError> {
5063                ::core::result::Result::Ok(
5064                    GetUnifiedAssetBalancesResponseOwnedView(
5065                        ::buffa::OwnedView::from_owned(msg)?,
5066                    ),
5067                )
5068            }
5069            /// Borrow the full [`GetUnifiedAssetBalancesResponseView`] with its lifetime tied to `&self`.
5070            #[must_use]
5071            pub fn view(&self) -> &GetUnifiedAssetBalancesResponseView<'_> {
5072                self.0.reborrow()
5073            }
5074            /// Convert to the owned message type.
5075            ///
5076            /// # Errors
5077            ///
5078            /// Returns an error if re-materializing preserved unknown fields
5079            /// fails (e.g. the unknown-field limit is exceeded).
5080            pub fn to_owned_message(
5081                &self,
5082            ) -> ::core::result::Result<
5083                super::super::GetUnifiedAssetBalancesResponse,
5084                ::buffa::DecodeError,
5085            > {
5086                self.0.to_owned_message()
5087            }
5088            /// The underlying bytes buffer.
5089            #[must_use]
5090            pub fn bytes(&self) -> &::buffa::bytes::Bytes {
5091                self.0.bytes()
5092            }
5093            /// Consume the handle, returning the underlying bytes buffer.
5094            #[must_use]
5095            pub fn into_bytes(self) -> ::buffa::bytes::Bytes {
5096                self.0.into_bytes()
5097            }
5098            /// Unified asset identifier.
5099            ///
5100            /// Field 1: `asset_id`
5101            #[must_use]
5102            pub fn asset_id(&self) -> u32 {
5103                self.0.reborrow().asset_id
5104            }
5105            /// Resolved history window.
5106            ///
5107            /// Field 2: `range`
5108            #[must_use]
5109            pub fn range(
5110                &self,
5111            ) -> ::buffa::EnumValue<super::super::ChainAnalyticsRange> {
5112                self.0.reborrow().range
5113            }
5114            /// Resolved bucket duration.
5115            ///
5116            /// Field 3: `bucket`
5117            #[must_use]
5118            pub fn bucket(&self) -> &'_ str {
5119                self.0.reborrow().bucket
5120            }
5121            /// First bucket timestamp in seconds since Unix epoch.
5122            ///
5123            /// Field 4: `start_ts_sec`
5124            #[must_use]
5125            pub fn start_ts_sec(&self) -> u32 {
5126                self.0.reborrow().start_ts_sec
5127            }
5128            /// Last bucket timestamp in seconds since Unix epoch.
5129            ///
5130            /// Field 5: `end_ts_sec`
5131            #[must_use]
5132            pub fn end_ts_sec(&self) -> u32 {
5133                self.0.reborrow().end_ts_sec
5134            }
5135            /// Number of buckets represented by each value column.
5136            ///
5137            /// Field 6: `points`
5138            #[must_use]
5139            pub fn points(&self) -> u32 {
5140                self.0.reborrow().points
5141            }
5142            /// Total unified balance per bucket across public account surfaces, scaled by
5143            /// AssetConfig.quantity_scale from SpotConfig for asset_id.
5144            /// Decode: total_balance_q / 10^quantity_scale.
5145            ///
5146            /// Field 7: `total_balance_q`
5147            #[must_use]
5148            pub fn total_balance_q(&self) -> &::buffa::RepeatedView<'_, u64> {
5149                &self.0.reborrow().total_balance_q
5150            }
5151        }
5152        impl ::core::convert::From<
5153            ::buffa::OwnedView<GetUnifiedAssetBalancesResponseView<'static>>,
5154        > for GetUnifiedAssetBalancesResponseOwnedView {
5155            fn from(
5156                inner: ::buffa::OwnedView<GetUnifiedAssetBalancesResponseView<'static>>,
5157            ) -> Self {
5158                GetUnifiedAssetBalancesResponseOwnedView(inner)
5159            }
5160        }
5161        impl ::core::convert::From<GetUnifiedAssetBalancesResponseOwnedView>
5162        for ::buffa::OwnedView<GetUnifiedAssetBalancesResponseView<'static>> {
5163            fn from(wrapper: GetUnifiedAssetBalancesResponseOwnedView) -> Self {
5164                wrapper.0
5165            }
5166        }
5167        impl ::core::convert::AsRef<
5168            ::buffa::OwnedView<GetUnifiedAssetBalancesResponseView<'static>>,
5169        > for GetUnifiedAssetBalancesResponseOwnedView {
5170            fn as_ref(
5171                &self,
5172            ) -> &::buffa::OwnedView<GetUnifiedAssetBalancesResponseView<'static>> {
5173                &self.0
5174            }
5175        }
5176        impl ::buffa::HasMessageView for super::super::GetUnifiedAssetBalancesResponse {
5177            type View<'a> = GetUnifiedAssetBalancesResponseView<'a>;
5178            type ViewHandle = GetUnifiedAssetBalancesResponseOwnedView;
5179        }
5180        impl ::serde::Serialize for GetUnifiedAssetBalancesResponseOwnedView {
5181            fn serialize<__S: ::serde::Serializer>(
5182                &self,
5183                __s: __S,
5184            ) -> ::core::result::Result<__S::Ok, __S::Error> {
5185                ::serde::Serialize::serialize(&self.0, __s)
5186            }
5187        }
5188    }
5189    /// Register this package's `Any` type entries and extension entries.
5190    pub fn register_types(reg: &mut ::buffa::type_registry::TypeRegistry) {
5191        reg.register_json_any(super::__GET_ZIPPED_ASSET_SUPPLY_REQUEST_JSON_ANY);
5192        reg.register_json_any(super::__GET_ZIPPED_ASSET_SUPPLY_RESPONSE_JSON_ANY);
5193        reg.register_json_any(super::__ZIPPED_ASSET_SUPPLY_SERIES_JSON_ANY);
5194        reg.register_json_any(super::__GET_ZIPPED_ASSET_SUPPLY_GROUP_REQUEST_JSON_ANY);
5195        reg.register_json_any(super::__GET_ZIPPED_ASSET_SUPPLY_GROUP_RESPONSE_JSON_ANY);
5196        reg.register_json_any(super::__GET_UNIFIED_ASSET_BALANCES_REQUEST_JSON_ANY);
5197        reg.register_json_any(super::__GET_UNIFIED_ASSET_BALANCES_RESPONSE_JSON_ANY);
5198    }
5199}
5200#[doc(inline)]
5201pub use self::__buffa::view::GetZippedAssetSupplyRequestView;
5202#[doc(inline)]
5203pub use self::__buffa::view::GetZippedAssetSupplyRequestOwnedView;
5204#[doc(inline)]
5205pub use self::__buffa::view::GetZippedAssetSupplyResponseView;
5206#[doc(inline)]
5207pub use self::__buffa::view::GetZippedAssetSupplyResponseOwnedView;
5208#[doc(inline)]
5209pub use self::__buffa::view::ZippedAssetSupplySeriesView;
5210#[doc(inline)]
5211pub use self::__buffa::view::ZippedAssetSupplySeriesOwnedView;
5212#[doc(inline)]
5213pub use self::__buffa::view::GetZippedAssetSupplyGroupRequestView;
5214#[doc(inline)]
5215pub use self::__buffa::view::GetZippedAssetSupplyGroupRequestOwnedView;
5216#[doc(inline)]
5217pub use self::__buffa::view::GetZippedAssetSupplyGroupResponseView;
5218#[doc(inline)]
5219pub use self::__buffa::view::GetZippedAssetSupplyGroupResponseOwnedView;
5220#[doc(inline)]
5221pub use self::__buffa::view::GetUnifiedAssetBalancesRequestView;
5222#[doc(inline)]
5223pub use self::__buffa::view::GetUnifiedAssetBalancesRequestOwnedView;
5224#[doc(inline)]
5225pub use self::__buffa::view::GetUnifiedAssetBalancesResponseView;
5226#[doc(inline)]
5227pub use self::__buffa::view::GetUnifiedAssetBalancesResponseOwnedView;
5228#[doc(inline)]
5229pub use self::__buffa::register_types;