(self)
| 43 | |
| 44 | impl SessionRow { |
| 45 | fn into_session(self) -> Session { |
| 46 | let summary = if self.summary_additions.is_some() |
| 47 | || self.summary_deletions.is_some() |
| 48 | || self.summary_files.is_some() |
| 49 | { |
| 50 | Some(SessionSummary { |
| 51 | additions: self.summary_additions.unwrap_or(0) as u64, |
| 52 | deletions: self.summary_deletions.unwrap_or(0) as u64, |
| 53 | files: self.summary_files.unwrap_or(0) as u64, |
| 54 | diffs: self |
| 55 | .summary_diffs |
| 56 | .and_then(|d| serde_json::from_str(&d).ok()), |
| 57 | }) |
| 58 | } else { |
| 59 | None |
| 60 | }; |
| 61 | |
| 62 | let created_dt = DateTime::from_timestamp_millis(self.created_at).unwrap_or_else(Utc::now); |
| 63 | let updated_dt = DateTime::from_timestamp_millis(self.updated_at).unwrap_or_else(Utc::now); |
| 64 | |
| 65 | Session { |
| 66 | id: self.id, |
| 67 | slug: self.slug, |
| 68 | project_id: self.project_id, |
| 69 | directory: self.directory, |
| 70 | parent_id: self.parent_id, |
| 71 | title: self.title, |
| 72 | version: self.version, |
| 73 | time: SessionTime { |
| 74 | created: self.created_at, |
| 75 | updated: self.updated_at, |
| 76 | compacting: self.time_compacting, |
| 77 | archived: self.time_archived, |
| 78 | }, |
| 79 | messages: vec![], |
| 80 | summary, |
| 81 | share: self.share_url.map(|url| SessionShare { url }), |
| 82 | revert: self.revert.and_then(|r| serde_json::from_str(&r).ok()), |
| 83 | permission: self.permission.and_then(|p| serde_json::from_str(&p).ok()), |
| 84 | usage: if self.usage_input_tokens.is_some() { |
| 85 | Some(SessionUsage { |
| 86 | input_tokens: self.usage_input_tokens.unwrap_or(0) as u64, |
| 87 | output_tokens: self.usage_output_tokens.unwrap_or(0) as u64, |
| 88 | reasoning_tokens: self.usage_reasoning_tokens.unwrap_or(0) as u64, |
| 89 | cache_write_tokens: self.usage_cache_write_tokens.unwrap_or(0) as u64, |
| 90 | cache_read_tokens: self.usage_cache_read_tokens.unwrap_or(0) as u64, |
| 91 | total_cost: self.usage_total_cost.unwrap_or(0.0), |
| 92 | }) |
| 93 | } else { |
| 94 | None |
| 95 | }, |
| 96 | status: string_to_status(&self.status), |
| 97 | metadata: HashMap::new(), |
| 98 | created_at: created_dt, |
| 99 | updated_at: updated_dt, |
| 100 | } |
| 101 | } |
| 102 | } |
no test coverage detected