create_meter/
create_meter.rs1use dodo_payments::{
2 DodoPayments,
3 client::DodoPaymentsConfigBuilder,
4 operations::common::structs::{AggregationType, Conjunction, MeterAggregation, MeterFilter},
5};
6use std::env;
7
8#[tokio::main]
9async fn main() {
10 let bearer_token = env::var("DODO_PAYMENTS_BEARER_TOKEN")
11 .expect("DODO_PAYMENTS_BEARER_TOKEN must be set in env variables");
12
13 let client = DodoPayments::new(
14 DodoPaymentsConfigBuilder::new()
15 .bearer_token(&bearer_token)
16 .environment("test_mode"),
17 );
18
19 let aggregation = MeterAggregation {
21 aggregation_type: AggregationType::Count,
22 key: None,
23 };
24
25 let response = client
26 .create_meter(
27 "API Requests".to_string(),
28 "api_request".to_string(),
29 aggregation,
30 "requests".to_string(),
31 )
32 .description("Track API requests".to_string())
33 .send()
34 .await;
35
36 println!("Response: {:#?}", response);
37
38 let sum_aggregation = MeterAggregation {
40 aggregation_type: AggregationType::Sum,
41 key: Some("amount".to_string()),
42 };
43
44 let filter_json = serde_json::json!({
47 "conjunction": "and",
48 "clauses": [
49 {
50 "key": "user_type",
51 "operator": "equals",
52 "value": "premium"
53 }
54 ]
55 });
56
57 let filter = MeterFilter {
58 conjunction: Conjunction::And,
59 clauses: vec![filter_json],
60 };
61
62 let response2 = client
63 .create_meter(
64 "Premium Revenue".to_string(),
65 "payment_processed".to_string(),
66 sum_aggregation,
67 "usd_cents".to_string(),
68 )
69 .description("Track revenue from premium users".to_string())
70 .filter(filter)
71 .send()
72 .await;
73
74 println!("Response 2: {:#?}", response2);
75}
76