gproxy_transform/transform/common/
usage.rs1#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
2pub struct TokenUsage {
3 pub input_tokens: Option<u64>,
4 pub output_tokens: Option<u64>,
5 pub cache_read_tokens: Option<u64>,
6 pub cache_creation_tokens: Option<u64>,
7 pub reasoning_tokens: Option<u64>,
8}
9
10impl TokenUsage {
11 pub const fn empty() -> Self {
12 Self {
13 input_tokens: None,
14 output_tokens: None,
15 cache_read_tokens: None,
16 cache_creation_tokens: None,
17 reasoning_tokens: None,
18 }
19 }
20
21 pub fn total_tokens(self) -> Option<u64> {
22 checked_sum([
23 self.input_tokens,
24 self.output_tokens,
25 self.cache_read_tokens,
26 self.cache_creation_tokens,
27 ])
28 }
29}
30
31pub fn checked_sum(values: impl IntoIterator<Item = Option<u64>>) -> Option<u64> {
32 values
33 .into_iter()
34 .flatten()
35 .try_fold(0_u64, |acc, value| acc.checked_add(value))
36}