Skip to main content

create_meter/
create_meter.rs

1use 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    // Create a simple count aggregation meter
20    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    // Create a more complex meter with sum aggregation and a filter
39    let sum_aggregation = MeterAggregation {
40        aggregation_type: AggregationType::Sum,
41        key: Some("amount".to_string()),
42    };
43
44    // Note: For complex filters, you would need to construct the JSON structure manually
45    // This is a simplified example showing the basic structure
46    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