1use crate::client::{Client, Response};
6use crate::ids::PriceId;
7use crate::params::{
8 CurrencyMap, Expand, Expandable, IdOrCreate, List, Metadata, Object, Paginable, RangeQuery,
9 Timestamp,
10};
11use crate::resources::{CreateProduct, Currency, CustomUnitAmount, Product, UpTo};
12use serde::{Deserialize, Serialize};
13
14#[derive(Clone, Debug, Default, Deserialize, Serialize)]
18pub struct Price {
19 pub id: PriceId,
21
22 #[serde(skip_serializing_if = "Option::is_none")]
24 pub active: Option<bool>,
25
26 #[serde(skip_serializing_if = "Option::is_none")]
32 pub billing_scheme: Option<PriceBillingScheme>,
33
34 #[serde(skip_serializing_if = "Option::is_none")]
38 pub created: Option<Timestamp>,
39
40 #[serde(skip_serializing_if = "Option::is_none")]
44 pub currency: Option<Currency>,
45
46 #[serde(skip_serializing_if = "Option::is_none")]
50 pub currency_options: Option<CurrencyMap<CurrencyOption>>,
51
52 #[serde(skip_serializing_if = "Option::is_none")]
54 pub custom_unit_amount: Option<CustomUnitAmount>,
55
56 #[serde(default)]
58 pub deleted: bool,
59
60 #[serde(skip_serializing_if = "Option::is_none")]
62 pub livemode: Option<bool>,
63
64 #[serde(skip_serializing_if = "Option::is_none")]
68 pub lookup_key: Option<String>,
69
70 #[serde(skip_serializing_if = "Option::is_none")]
74 pub metadata: Option<Metadata>,
75
76 #[serde(skip_serializing_if = "Option::is_none")]
78 pub nickname: Option<String>,
79
80 #[serde(skip_serializing_if = "Option::is_none")]
82 pub product: Option<Expandable<Product>>,
83
84 #[serde(skip_serializing_if = "Option::is_none")]
86 pub recurring: Option<Recurring>,
87
88 #[serde(skip_serializing_if = "Option::is_none")]
94 pub tax_behavior: Option<PriceTaxBehavior>,
95
96 #[serde(skip_serializing_if = "Option::is_none")]
101 pub tiers: Option<Vec<PriceTier>>,
102
103 #[serde(skip_serializing_if = "Option::is_none")]
108 pub tiers_mode: Option<PriceTiersMode>,
109
110 #[serde(skip_serializing_if = "Option::is_none")]
114 pub transform_quantity: Option<TransformQuantity>,
115
116 #[serde(rename = "type")]
118 #[serde(skip_serializing_if = "Option::is_none")]
119 pub type_: Option<PriceType>,
120
121 #[serde(skip_serializing_if = "Option::is_none")]
125 pub unit_amount: Option<i64>,
126
127 #[serde(skip_serializing_if = "Option::is_none")]
131 pub unit_amount_decimal: Option<String>,
132}
133
134impl Price {
135 pub fn list(client: &Client, params: &ListPrices<'_>) -> Response<List<Price>> {
139 client.get_query("/prices", params)
140 }
141
142 pub fn create(client: &Client, params: CreatePrice<'_>) -> Response<Price> {
146 #[allow(clippy::needless_borrows_for_generic_args)]
147 client.post_form("/prices", ¶ms)
148 }
149
150 pub fn retrieve(client: &Client, id: &PriceId, expand: &[&str]) -> Response<Price> {
152 client.get_query(&format!("/prices/{}", id), Expand { expand })
153 }
154
155 pub fn update(client: &Client, id: &PriceId, params: UpdatePrice<'_>) -> Response<Price> {
159 #[allow(clippy::needless_borrows_for_generic_args)]
160 client.post_form(&format!("/prices/{}", id), ¶ms)
161 }
162}
163
164impl Object for Price {
165 type Id = PriceId;
166 fn id(&self) -> Self::Id {
167 self.id.clone()
168 }
169 fn object(&self) -> &'static str {
170 "price"
171 }
172}
173
174#[derive(Clone, Debug, Default, Deserialize, Serialize)]
175pub struct CurrencyOption {
176 pub custom_unit_amount: Option<CustomUnitAmount>,
178
179 pub tax_behavior: Option<CurrencyOptionTaxBehavior>,
185
186 #[serde(skip_serializing_if = "Option::is_none")]
191 pub tiers: Option<Vec<PriceTier>>,
192
193 pub unit_amount: Option<i64>,
197
198 pub unit_amount_decimal: Option<String>,
202}
203
204#[derive(Clone, Debug, Default, Deserialize, Serialize)]
205pub struct PriceTier {
206 pub flat_amount: Option<i64>,
208
209 pub flat_amount_decimal: Option<String>,
211
212 pub unit_amount: Option<i64>,
214
215 pub unit_amount_decimal: Option<String>,
217
218 pub up_to: Option<i64>,
220}
221
222#[derive(Clone, Debug, Default, Deserialize, Serialize)]
223pub struct Recurring {
224 pub aggregate_usage: Option<RecurringAggregateUsage>,
228
229 pub interval: RecurringInterval,
233
234 pub interval_count: u64,
238
239 pub trial_period_days: Option<u32>,
241
242 pub usage_type: RecurringUsageType,
249}
250
251#[derive(Clone, Debug, Default, Deserialize, Serialize)]
252pub struct TransformQuantity {
253 pub divide_by: i64,
255
256 pub round: TransformQuantityRound,
258}
259
260#[derive(Clone, Debug, Serialize)]
262pub struct CreatePrice<'a> {
263 #[serde(skip_serializing_if = "Option::is_none")]
267 pub active: Option<bool>,
268
269 #[serde(skip_serializing_if = "Option::is_none")]
275 pub billing_scheme: Option<PriceBillingScheme>,
276
277 pub currency: Currency,
281
282 #[serde(skip_serializing_if = "Option::is_none")]
286 pub currency_options: Option<CurrencyMap<CreatePriceCurrencyOptions>>,
287
288 #[serde(skip_serializing_if = "Option::is_none")]
290 pub custom_unit_amount: Option<CreatePriceCustomUnitAmount>,
291
292 #[serde(skip_serializing_if = "Expand::is_empty")]
294 pub expand: &'a [&'a str],
295
296 #[serde(skip_serializing_if = "Option::is_none")]
300 pub lookup_key: Option<&'a str>,
301
302 #[serde(skip_serializing_if = "Option::is_none")]
308 pub metadata: Option<Metadata>,
309
310 #[serde(skip_serializing_if = "Option::is_none")]
312 pub nickname: Option<&'a str>,
313
314 #[serde(skip_serializing_if = "Option::is_none")]
316 pub product: Option<IdOrCreate<'a, CreateProduct<'a>>>,
317
318 #[serde(skip_serializing_if = "Option::is_none")]
320 pub product_data: Option<CreatePriceProductData>,
321
322 #[serde(skip_serializing_if = "Option::is_none")]
324 pub recurring: Option<CreatePriceRecurring>,
325
326 #[serde(skip_serializing_if = "Option::is_none")]
332 pub tax_behavior: Option<PriceTaxBehavior>,
333
334 #[serde(skip_serializing_if = "Option::is_none")]
339 pub tiers: Option<Vec<CreatePriceTiers>>,
340
341 #[serde(skip_serializing_if = "Option::is_none")]
345 pub tiers_mode: Option<PriceTiersMode>,
346
347 #[serde(skip_serializing_if = "Option::is_none")]
349 pub transfer_lookup_key: Option<bool>,
350
351 #[serde(skip_serializing_if = "Option::is_none")]
355 pub transform_quantity: Option<CreatePriceTransformQuantity>,
356
357 #[serde(skip_serializing_if = "Option::is_none")]
361 pub unit_amount: Option<i64>,
362
363 #[serde(skip_serializing_if = "Option::is_none")]
367 pub unit_amount_decimal: Option<&'a str>,
368}
369
370impl<'a> CreatePrice<'a> {
371 pub fn new(currency: Currency) -> Self {
372 CreatePrice {
373 active: Default::default(),
374 billing_scheme: Default::default(),
375 currency,
376 currency_options: Default::default(),
377 custom_unit_amount: Default::default(),
378 expand: Default::default(),
379 lookup_key: Default::default(),
380 metadata: Default::default(),
381 nickname: Default::default(),
382 product: Default::default(),
383 product_data: Default::default(),
384 recurring: Default::default(),
385 tax_behavior: Default::default(),
386 tiers: Default::default(),
387 tiers_mode: Default::default(),
388 transfer_lookup_key: Default::default(),
389 transform_quantity: Default::default(),
390 unit_amount: Default::default(),
391 unit_amount_decimal: Default::default(),
392 }
393 }
394}
395
396#[derive(Clone, Debug, Serialize, Default)]
398pub struct ListPrices<'a> {
399 #[serde(skip_serializing_if = "Option::is_none")]
401 pub active: Option<bool>,
402
403 #[serde(skip_serializing_if = "Option::is_none")]
407 pub created: Option<RangeQuery<Timestamp>>,
408
409 #[serde(skip_serializing_if = "Option::is_none")]
411 pub currency: Option<Currency>,
412
413 #[serde(skip_serializing_if = "Option::is_none")]
418 pub ending_before: Option<PriceId>,
419
420 #[serde(skip_serializing_if = "Expand::is_empty")]
422 pub expand: &'a [&'a str],
423
424 #[serde(skip_serializing_if = "Option::is_none")]
428 pub limit: Option<u64>,
429
430 #[serde(skip_serializing_if = "Option::is_none")]
432 pub lookup_keys: Option<Vec<String>>,
433
434 #[serde(skip_serializing_if = "Option::is_none")]
436 pub product: Option<IdOrCreate<'a, CreateProduct<'a>>>,
437
438 #[serde(skip_serializing_if = "Option::is_none")]
440 pub recurring: Option<ListPricesRecurring>,
441
442 #[serde(skip_serializing_if = "Option::is_none")]
447 pub starting_after: Option<PriceId>,
448
449 #[serde(rename = "type")]
451 #[serde(skip_serializing_if = "Option::is_none")]
452 pub type_: Option<PriceType>,
453}
454
455impl<'a> ListPrices<'a> {
456 pub fn new() -> Self {
457 ListPrices {
458 active: Default::default(),
459 created: Default::default(),
460 currency: Default::default(),
461 ending_before: Default::default(),
462 expand: Default::default(),
463 limit: Default::default(),
464 lookup_keys: Default::default(),
465 product: Default::default(),
466 recurring: Default::default(),
467 starting_after: Default::default(),
468 type_: Default::default(),
469 }
470 }
471}
472impl Paginable for ListPrices<'_> {
473 type O = Price;
474 fn set_last(&mut self, item: Self::O) {
475 self.starting_after = Some(item.id());
476 }
477}
478#[derive(Clone, Debug, Serialize, Default)]
480pub struct UpdatePrice<'a> {
481 #[serde(skip_serializing_if = "Option::is_none")]
485 pub active: Option<bool>,
486
487 #[serde(skip_serializing_if = "Option::is_none")]
491 pub currency_options: Option<CurrencyMap<UpdatePriceCurrencyOptions>>,
492
493 #[serde(skip_serializing_if = "Expand::is_empty")]
495 pub expand: &'a [&'a str],
496
497 #[serde(skip_serializing_if = "Option::is_none")]
501 pub lookup_key: Option<&'a str>,
502
503 #[serde(skip_serializing_if = "Option::is_none")]
509 pub metadata: Option<Metadata>,
510
511 #[serde(skip_serializing_if = "Option::is_none")]
513 pub nickname: Option<&'a str>,
514
515 #[serde(skip_serializing_if = "Option::is_none")]
521 pub tax_behavior: Option<PriceTaxBehavior>,
522
523 #[serde(skip_serializing_if = "Option::is_none")]
525 pub transfer_lookup_key: Option<bool>,
526}
527
528impl<'a> UpdatePrice<'a> {
529 pub fn new() -> Self {
530 UpdatePrice {
531 active: Default::default(),
532 currency_options: Default::default(),
533 expand: Default::default(),
534 lookup_key: Default::default(),
535 metadata: Default::default(),
536 nickname: Default::default(),
537 tax_behavior: Default::default(),
538 transfer_lookup_key: Default::default(),
539 }
540 }
541}
542
543#[derive(Clone, Debug, Default, Deserialize, Serialize)]
544pub struct CreatePriceCurrencyOptions {
545 #[serde(skip_serializing_if = "Option::is_none")]
547 pub custom_unit_amount: Option<CreatePriceCurrencyOptionsCustomUnitAmount>,
548
549 #[serde(skip_serializing_if = "Option::is_none")]
555 pub tax_behavior: Option<CreatePriceCurrencyOptionsTaxBehavior>,
556
557 #[serde(skip_serializing_if = "Option::is_none")]
562 pub tiers: Option<Vec<CreatePriceCurrencyOptionsTiers>>,
563
564 #[serde(skip_serializing_if = "Option::is_none")]
566 pub unit_amount: Option<i64>,
567
568 #[serde(skip_serializing_if = "Option::is_none")]
572 pub unit_amount_decimal: Option<String>,
573}
574
575#[derive(Clone, Debug, Default, Deserialize, Serialize)]
576pub struct CreatePriceCustomUnitAmount {
577 pub enabled: bool,
579
580 #[serde(skip_serializing_if = "Option::is_none")]
582 pub maximum: Option<i64>,
583
584 #[serde(skip_serializing_if = "Option::is_none")]
588 pub minimum: Option<i64>,
589
590 #[serde(skip_serializing_if = "Option::is_none")]
592 pub preset: Option<i64>,
593}
594
595#[derive(Clone, Debug, Default, Deserialize, Serialize)]
596pub struct CreatePriceProductData {
597 #[serde(skip_serializing_if = "Option::is_none")]
601 pub active: Option<bool>,
602
603 #[serde(skip_serializing_if = "Option::is_none")]
608 pub id: Option<String>,
609
610 #[serde(skip_serializing_if = "Option::is_none")]
616 pub metadata: Option<Metadata>,
617
618 pub name: String,
620
621 #[serde(skip_serializing_if = "Option::is_none")]
627 pub statement_descriptor: Option<String>,
628
629 #[serde(skip_serializing_if = "Option::is_none")]
631 pub tax_code: Option<String>,
632
633 #[serde(skip_serializing_if = "Option::is_none")]
637 pub unit_label: Option<String>,
638}
639
640#[derive(Clone, Debug, Default, Deserialize, Serialize)]
641pub struct CreatePriceRecurring {
642 #[serde(skip_serializing_if = "Option::is_none")]
646 pub aggregate_usage: Option<CreatePriceRecurringAggregateUsage>,
647
648 pub interval: CreatePriceRecurringInterval,
652
653 #[serde(skip_serializing_if = "Option::is_none")]
658 pub interval_count: Option<u64>,
659
660 #[serde(skip_serializing_if = "Option::is_none")]
662 pub trial_period_days: Option<u32>,
663
664 #[serde(skip_serializing_if = "Option::is_none")]
671 pub usage_type: Option<CreatePriceRecurringUsageType>,
672}
673
674#[derive(Clone, Debug, Default, Deserialize, Serialize)]
675pub struct CreatePriceTiers {
676 #[serde(skip_serializing_if = "Option::is_none")]
678 pub flat_amount: Option<i64>,
679
680 #[serde(skip_serializing_if = "Option::is_none")]
684 pub flat_amount_decimal: Option<String>,
685
686 #[serde(skip_serializing_if = "Option::is_none")]
688 pub unit_amount: Option<i64>,
689
690 #[serde(skip_serializing_if = "Option::is_none")]
694 pub unit_amount_decimal: Option<String>,
695
696 pub up_to: Option<UpTo>,
701}
702
703#[derive(Clone, Debug, Default, Deserialize, Serialize)]
704pub struct CreatePriceTransformQuantity {
705 pub divide_by: i64,
707
708 pub round: CreatePriceTransformQuantityRound,
710}
711
712#[derive(Clone, Debug, Default, Deserialize, Serialize)]
713pub struct ListPricesRecurring {
714 #[serde(skip_serializing_if = "Option::is_none")]
718 pub interval: Option<ListPricesRecurringInterval>,
719
720 #[serde(skip_serializing_if = "Option::is_none")]
724 pub usage_type: Option<ListPricesRecurringUsageType>,
725}
726
727#[derive(Clone, Debug, Default, Deserialize, Serialize)]
728pub struct UpdatePriceCurrencyOptions {
729 #[serde(skip_serializing_if = "Option::is_none")]
731 pub custom_unit_amount: Option<UpdatePriceCurrencyOptionsCustomUnitAmount>,
732
733 #[serde(skip_serializing_if = "Option::is_none")]
739 pub tax_behavior: Option<UpdatePriceCurrencyOptionsTaxBehavior>,
740
741 #[serde(skip_serializing_if = "Option::is_none")]
746 pub tiers: Option<Vec<UpdatePriceCurrencyOptionsTiers>>,
747
748 #[serde(skip_serializing_if = "Option::is_none")]
750 pub unit_amount: Option<i64>,
751
752 #[serde(skip_serializing_if = "Option::is_none")]
756 pub unit_amount_decimal: Option<String>,
757}
758
759#[derive(Clone, Debug, Default, Deserialize, Serialize)]
760pub struct CreatePriceCurrencyOptionsCustomUnitAmount {
761 pub enabled: bool,
763
764 #[serde(skip_serializing_if = "Option::is_none")]
766 pub maximum: Option<i64>,
767
768 #[serde(skip_serializing_if = "Option::is_none")]
772 pub minimum: Option<i64>,
773
774 #[serde(skip_serializing_if = "Option::is_none")]
776 pub preset: Option<i64>,
777}
778
779#[derive(Clone, Debug, Default, Deserialize, Serialize)]
780pub struct CreatePriceCurrencyOptionsTiers {
781 #[serde(skip_serializing_if = "Option::is_none")]
783 pub flat_amount: Option<i64>,
784
785 #[serde(skip_serializing_if = "Option::is_none")]
789 pub flat_amount_decimal: Option<String>,
790
791 #[serde(skip_serializing_if = "Option::is_none")]
793 pub unit_amount: Option<i64>,
794
795 #[serde(skip_serializing_if = "Option::is_none")]
799 pub unit_amount_decimal: Option<String>,
800
801 pub up_to: Option<UpTo>,
806}
807
808#[derive(Clone, Debug, Default, Deserialize, Serialize)]
809pub struct UpdatePriceCurrencyOptionsCustomUnitAmount {
810 pub enabled: bool,
812
813 #[serde(skip_serializing_if = "Option::is_none")]
815 pub maximum: Option<i64>,
816
817 #[serde(skip_serializing_if = "Option::is_none")]
821 pub minimum: Option<i64>,
822
823 #[serde(skip_serializing_if = "Option::is_none")]
825 pub preset: Option<i64>,
826}
827
828#[derive(Clone, Debug, Default, Deserialize, Serialize)]
829pub struct UpdatePriceCurrencyOptionsTiers {
830 #[serde(skip_serializing_if = "Option::is_none")]
832 pub flat_amount: Option<i64>,
833
834 #[serde(skip_serializing_if = "Option::is_none")]
838 pub flat_amount_decimal: Option<String>,
839
840 #[serde(skip_serializing_if = "Option::is_none")]
842 pub unit_amount: Option<i64>,
843
844 #[serde(skip_serializing_if = "Option::is_none")]
848 pub unit_amount_decimal: Option<String>,
849
850 pub up_to: Option<UpTo>,
855}
856
857#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
859#[serde(rename_all = "snake_case")]
860pub enum CreatePriceCurrencyOptionsTaxBehavior {
861 Exclusive,
862 Inclusive,
863 Unspecified,
864}
865
866impl CreatePriceCurrencyOptionsTaxBehavior {
867 pub fn as_str(self) -> &'static str {
868 match self {
869 CreatePriceCurrencyOptionsTaxBehavior::Exclusive => "exclusive",
870 CreatePriceCurrencyOptionsTaxBehavior::Inclusive => "inclusive",
871 CreatePriceCurrencyOptionsTaxBehavior::Unspecified => "unspecified",
872 }
873 }
874}
875
876impl AsRef<str> for CreatePriceCurrencyOptionsTaxBehavior {
877 fn as_ref(&self) -> &str {
878 self.as_str()
879 }
880}
881
882impl std::fmt::Display for CreatePriceCurrencyOptionsTaxBehavior {
883 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
884 self.as_str().fmt(f)
885 }
886}
887impl std::default::Default for CreatePriceCurrencyOptionsTaxBehavior {
888 fn default() -> Self {
889 Self::Exclusive
890 }
891}
892
893#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
895#[serde(rename_all = "snake_case")]
896pub enum CreatePriceRecurringAggregateUsage {
897 LastDuringPeriod,
898 LastEver,
899 Max,
900 Sum,
901}
902
903impl CreatePriceRecurringAggregateUsage {
904 pub fn as_str(self) -> &'static str {
905 match self {
906 CreatePriceRecurringAggregateUsage::LastDuringPeriod => "last_during_period",
907 CreatePriceRecurringAggregateUsage::LastEver => "last_ever",
908 CreatePriceRecurringAggregateUsage::Max => "max",
909 CreatePriceRecurringAggregateUsage::Sum => "sum",
910 }
911 }
912}
913
914impl AsRef<str> for CreatePriceRecurringAggregateUsage {
915 fn as_ref(&self) -> &str {
916 self.as_str()
917 }
918}
919
920impl std::fmt::Display for CreatePriceRecurringAggregateUsage {
921 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
922 self.as_str().fmt(f)
923 }
924}
925impl std::default::Default for CreatePriceRecurringAggregateUsage {
926 fn default() -> Self {
927 Self::LastDuringPeriod
928 }
929}
930
931#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
933#[serde(rename_all = "snake_case")]
934pub enum CreatePriceRecurringInterval {
935 Day,
936 Month,
937 Week,
938 Year,
939}
940
941impl CreatePriceRecurringInterval {
942 pub fn as_str(self) -> &'static str {
943 match self {
944 CreatePriceRecurringInterval::Day => "day",
945 CreatePriceRecurringInterval::Month => "month",
946 CreatePriceRecurringInterval::Week => "week",
947 CreatePriceRecurringInterval::Year => "year",
948 }
949 }
950}
951
952impl AsRef<str> for CreatePriceRecurringInterval {
953 fn as_ref(&self) -> &str {
954 self.as_str()
955 }
956}
957
958impl std::fmt::Display for CreatePriceRecurringInterval {
959 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
960 self.as_str().fmt(f)
961 }
962}
963impl std::default::Default for CreatePriceRecurringInterval {
964 fn default() -> Self {
965 Self::Day
966 }
967}
968
969#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
971#[serde(rename_all = "snake_case")]
972pub enum CreatePriceRecurringUsageType {
973 Licensed,
974 Metered,
975}
976
977impl CreatePriceRecurringUsageType {
978 pub fn as_str(self) -> &'static str {
979 match self {
980 CreatePriceRecurringUsageType::Licensed => "licensed",
981 CreatePriceRecurringUsageType::Metered => "metered",
982 }
983 }
984}
985
986impl AsRef<str> for CreatePriceRecurringUsageType {
987 fn as_ref(&self) -> &str {
988 self.as_str()
989 }
990}
991
992impl std::fmt::Display for CreatePriceRecurringUsageType {
993 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
994 self.as_str().fmt(f)
995 }
996}
997impl std::default::Default for CreatePriceRecurringUsageType {
998 fn default() -> Self {
999 Self::Licensed
1000 }
1001}
1002
1003#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
1005#[serde(rename_all = "snake_case")]
1006pub enum CreatePriceTransformQuantityRound {
1007 Down,
1008 Up,
1009}
1010
1011impl CreatePriceTransformQuantityRound {
1012 pub fn as_str(self) -> &'static str {
1013 match self {
1014 CreatePriceTransformQuantityRound::Down => "down",
1015 CreatePriceTransformQuantityRound::Up => "up",
1016 }
1017 }
1018}
1019
1020impl AsRef<str> for CreatePriceTransformQuantityRound {
1021 fn as_ref(&self) -> &str {
1022 self.as_str()
1023 }
1024}
1025
1026impl std::fmt::Display for CreatePriceTransformQuantityRound {
1027 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
1028 self.as_str().fmt(f)
1029 }
1030}
1031impl std::default::Default for CreatePriceTransformQuantityRound {
1032 fn default() -> Self {
1033 Self::Down
1034 }
1035}
1036
1037#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
1039#[serde(rename_all = "snake_case")]
1040pub enum CurrencyOptionTaxBehavior {
1041 Exclusive,
1042 Inclusive,
1043 Unspecified,
1044}
1045
1046impl CurrencyOptionTaxBehavior {
1047 pub fn as_str(self) -> &'static str {
1048 match self {
1049 CurrencyOptionTaxBehavior::Exclusive => "exclusive",
1050 CurrencyOptionTaxBehavior::Inclusive => "inclusive",
1051 CurrencyOptionTaxBehavior::Unspecified => "unspecified",
1052 }
1053 }
1054}
1055
1056impl AsRef<str> for CurrencyOptionTaxBehavior {
1057 fn as_ref(&self) -> &str {
1058 self.as_str()
1059 }
1060}
1061
1062impl std::fmt::Display for CurrencyOptionTaxBehavior {
1063 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
1064 self.as_str().fmt(f)
1065 }
1066}
1067impl std::default::Default for CurrencyOptionTaxBehavior {
1068 fn default() -> Self {
1069 Self::Exclusive
1070 }
1071}
1072
1073#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
1075#[serde(rename_all = "snake_case")]
1076pub enum ListPricesRecurringInterval {
1077 Day,
1078 Month,
1079 Week,
1080 Year,
1081}
1082
1083impl ListPricesRecurringInterval {
1084 pub fn as_str(self) -> &'static str {
1085 match self {
1086 ListPricesRecurringInterval::Day => "day",
1087 ListPricesRecurringInterval::Month => "month",
1088 ListPricesRecurringInterval::Week => "week",
1089 ListPricesRecurringInterval::Year => "year",
1090 }
1091 }
1092}
1093
1094impl AsRef<str> for ListPricesRecurringInterval {
1095 fn as_ref(&self) -> &str {
1096 self.as_str()
1097 }
1098}
1099
1100impl std::fmt::Display for ListPricesRecurringInterval {
1101 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
1102 self.as_str().fmt(f)
1103 }
1104}
1105impl std::default::Default for ListPricesRecurringInterval {
1106 fn default() -> Self {
1107 Self::Day
1108 }
1109}
1110
1111#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
1113#[serde(rename_all = "snake_case")]
1114pub enum ListPricesRecurringUsageType {
1115 Licensed,
1116 Metered,
1117}
1118
1119impl ListPricesRecurringUsageType {
1120 pub fn as_str(self) -> &'static str {
1121 match self {
1122 ListPricesRecurringUsageType::Licensed => "licensed",
1123 ListPricesRecurringUsageType::Metered => "metered",
1124 }
1125 }
1126}
1127
1128impl AsRef<str> for ListPricesRecurringUsageType {
1129 fn as_ref(&self) -> &str {
1130 self.as_str()
1131 }
1132}
1133
1134impl std::fmt::Display for ListPricesRecurringUsageType {
1135 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
1136 self.as_str().fmt(f)
1137 }
1138}
1139impl std::default::Default for ListPricesRecurringUsageType {
1140 fn default() -> Self {
1141 Self::Licensed
1142 }
1143}
1144
1145#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
1147#[serde(rename_all = "snake_case")]
1148pub enum PriceBillingScheme {
1149 PerUnit,
1150 Tiered,
1151}
1152
1153impl PriceBillingScheme {
1154 pub fn as_str(self) -> &'static str {
1155 match self {
1156 PriceBillingScheme::PerUnit => "per_unit",
1157 PriceBillingScheme::Tiered => "tiered",
1158 }
1159 }
1160}
1161
1162impl AsRef<str> for PriceBillingScheme {
1163 fn as_ref(&self) -> &str {
1164 self.as_str()
1165 }
1166}
1167
1168impl std::fmt::Display for PriceBillingScheme {
1169 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
1170 self.as_str().fmt(f)
1171 }
1172}
1173impl std::default::Default for PriceBillingScheme {
1174 fn default() -> Self {
1175 Self::PerUnit
1176 }
1177}
1178
1179#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
1181#[serde(rename_all = "snake_case")]
1182pub enum PriceTaxBehavior {
1183 Exclusive,
1184 Inclusive,
1185 Unspecified,
1186}
1187
1188impl PriceTaxBehavior {
1189 pub fn as_str(self) -> &'static str {
1190 match self {
1191 PriceTaxBehavior::Exclusive => "exclusive",
1192 PriceTaxBehavior::Inclusive => "inclusive",
1193 PriceTaxBehavior::Unspecified => "unspecified",
1194 }
1195 }
1196}
1197
1198impl AsRef<str> for PriceTaxBehavior {
1199 fn as_ref(&self) -> &str {
1200 self.as_str()
1201 }
1202}
1203
1204impl std::fmt::Display for PriceTaxBehavior {
1205 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
1206 self.as_str().fmt(f)
1207 }
1208}
1209impl std::default::Default for PriceTaxBehavior {
1210 fn default() -> Self {
1211 Self::Exclusive
1212 }
1213}
1214
1215#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
1217#[serde(rename_all = "snake_case")]
1218pub enum PriceTiersMode {
1219 Graduated,
1220 Volume,
1221}
1222
1223impl PriceTiersMode {
1224 pub fn as_str(self) -> &'static str {
1225 match self {
1226 PriceTiersMode::Graduated => "graduated",
1227 PriceTiersMode::Volume => "volume",
1228 }
1229 }
1230}
1231
1232impl AsRef<str> for PriceTiersMode {
1233 fn as_ref(&self) -> &str {
1234 self.as_str()
1235 }
1236}
1237
1238impl std::fmt::Display for PriceTiersMode {
1239 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
1240 self.as_str().fmt(f)
1241 }
1242}
1243impl std::default::Default for PriceTiersMode {
1244 fn default() -> Self {
1245 Self::Graduated
1246 }
1247}
1248
1249#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
1251#[serde(rename_all = "snake_case")]
1252pub enum PriceType {
1253 OneTime,
1254 Recurring,
1255}
1256
1257impl PriceType {
1258 pub fn as_str(self) -> &'static str {
1259 match self {
1260 PriceType::OneTime => "one_time",
1261 PriceType::Recurring => "recurring",
1262 }
1263 }
1264}
1265
1266impl AsRef<str> for PriceType {
1267 fn as_ref(&self) -> &str {
1268 self.as_str()
1269 }
1270}
1271
1272impl std::fmt::Display for PriceType {
1273 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
1274 self.as_str().fmt(f)
1275 }
1276}
1277impl std::default::Default for PriceType {
1278 fn default() -> Self {
1279 Self::OneTime
1280 }
1281}
1282
1283#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
1285#[serde(rename_all = "snake_case")]
1286pub enum RecurringAggregateUsage {
1287 LastDuringPeriod,
1288 LastEver,
1289 Max,
1290 Sum,
1291}
1292
1293impl RecurringAggregateUsage {
1294 pub fn as_str(self) -> &'static str {
1295 match self {
1296 RecurringAggregateUsage::LastDuringPeriod => "last_during_period",
1297 RecurringAggregateUsage::LastEver => "last_ever",
1298 RecurringAggregateUsage::Max => "max",
1299 RecurringAggregateUsage::Sum => "sum",
1300 }
1301 }
1302}
1303
1304impl AsRef<str> for RecurringAggregateUsage {
1305 fn as_ref(&self) -> &str {
1306 self.as_str()
1307 }
1308}
1309
1310impl std::fmt::Display for RecurringAggregateUsage {
1311 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
1312 self.as_str().fmt(f)
1313 }
1314}
1315impl std::default::Default for RecurringAggregateUsage {
1316 fn default() -> Self {
1317 Self::LastDuringPeriod
1318 }
1319}
1320
1321#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
1323#[serde(rename_all = "snake_case")]
1324pub enum RecurringInterval {
1325 Day,
1326 Month,
1327 Week,
1328 Year,
1329}
1330
1331impl RecurringInterval {
1332 pub fn as_str(self) -> &'static str {
1333 match self {
1334 RecurringInterval::Day => "day",
1335 RecurringInterval::Month => "month",
1336 RecurringInterval::Week => "week",
1337 RecurringInterval::Year => "year",
1338 }
1339 }
1340}
1341
1342impl AsRef<str> for RecurringInterval {
1343 fn as_ref(&self) -> &str {
1344 self.as_str()
1345 }
1346}
1347
1348impl std::fmt::Display for RecurringInterval {
1349 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
1350 self.as_str().fmt(f)
1351 }
1352}
1353impl std::default::Default for RecurringInterval {
1354 fn default() -> Self {
1355 Self::Day
1356 }
1357}
1358
1359#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
1361#[serde(rename_all = "snake_case")]
1362pub enum RecurringUsageType {
1363 Licensed,
1364 Metered,
1365}
1366
1367impl RecurringUsageType {
1368 pub fn as_str(self) -> &'static str {
1369 match self {
1370 RecurringUsageType::Licensed => "licensed",
1371 RecurringUsageType::Metered => "metered",
1372 }
1373 }
1374}
1375
1376impl AsRef<str> for RecurringUsageType {
1377 fn as_ref(&self) -> &str {
1378 self.as_str()
1379 }
1380}
1381
1382impl std::fmt::Display for RecurringUsageType {
1383 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
1384 self.as_str().fmt(f)
1385 }
1386}
1387impl std::default::Default for RecurringUsageType {
1388 fn default() -> Self {
1389 Self::Licensed
1390 }
1391}
1392
1393#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
1395#[serde(rename_all = "snake_case")]
1396pub enum TransformQuantityRound {
1397 Down,
1398 Up,
1399}
1400
1401impl TransformQuantityRound {
1402 pub fn as_str(self) -> &'static str {
1403 match self {
1404 TransformQuantityRound::Down => "down",
1405 TransformQuantityRound::Up => "up",
1406 }
1407 }
1408}
1409
1410impl AsRef<str> for TransformQuantityRound {
1411 fn as_ref(&self) -> &str {
1412 self.as_str()
1413 }
1414}
1415
1416impl std::fmt::Display for TransformQuantityRound {
1417 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
1418 self.as_str().fmt(f)
1419 }
1420}
1421impl std::default::Default for TransformQuantityRound {
1422 fn default() -> Self {
1423 Self::Down
1424 }
1425}
1426
1427#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
1429#[serde(rename_all = "snake_case")]
1430pub enum UpdatePriceCurrencyOptionsTaxBehavior {
1431 Exclusive,
1432 Inclusive,
1433 Unspecified,
1434}
1435
1436impl UpdatePriceCurrencyOptionsTaxBehavior {
1437 pub fn as_str(self) -> &'static str {
1438 match self {
1439 UpdatePriceCurrencyOptionsTaxBehavior::Exclusive => "exclusive",
1440 UpdatePriceCurrencyOptionsTaxBehavior::Inclusive => "inclusive",
1441 UpdatePriceCurrencyOptionsTaxBehavior::Unspecified => "unspecified",
1442 }
1443 }
1444}
1445
1446impl AsRef<str> for UpdatePriceCurrencyOptionsTaxBehavior {
1447 fn as_ref(&self) -> &str {
1448 self.as_str()
1449 }
1450}
1451
1452impl std::fmt::Display for UpdatePriceCurrencyOptionsTaxBehavior {
1453 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
1454 self.as_str().fmt(f)
1455 }
1456}
1457impl std::default::Default for UpdatePriceCurrencyOptionsTaxBehavior {
1458 fn default() -> Self {
1459 Self::Exclusive
1460 }
1461}