101 lines
3.5 KiB
Rust
101 lines
3.5 KiB
Rust
use chrono::Utc;
|
|
use dirigent_protocol::types::meta::{Meta, ProviderMeta};
|
|
use dirigent_protocol::{Session, SessionMetadata};
|
|
use std::collections::HashMap;
|
|
|
|
fn main() {
|
|
println!("=== SessionMetadata JSON Examples ===\n");
|
|
|
|
// Example 1: Without new fields (backward compatible)
|
|
println!("1. Basic SessionMetadata (without new fields):");
|
|
let basic = SessionMetadata {
|
|
project_path: "/workspace/project".to_string(),
|
|
model: Some("gpt-4".to_string()),
|
|
total_messages: 10,
|
|
system_message: None,
|
|
current_mode_id: None,
|
|
_meta: None,
|
|
project_id: None,
|
|
};
|
|
let json = serde_json::to_string_pretty(&basic).unwrap();
|
|
println!("{}\n", json);
|
|
|
|
// Example 2: With current_mode_id
|
|
println!("2. SessionMetadata with current_mode_id:");
|
|
let with_mode = SessionMetadata {
|
|
project_path: "/workspace/project".to_string(),
|
|
model: Some("claude-3-sonnet".to_string()),
|
|
total_messages: 5,
|
|
system_message: Some("You are a helpful coding assistant".to_string()),
|
|
current_mode_id: Some("code_mode".to_string()),
|
|
_meta: None,
|
|
project_id: None,
|
|
};
|
|
let json = serde_json::to_string_pretty(&with_mode).unwrap();
|
|
println!("{}\n", json);
|
|
|
|
// Example 3: With provider metadata
|
|
println!("3. SessionMetadata with provider metadata:");
|
|
let meta = Meta {
|
|
provider: Some(ProviderMeta {
|
|
name: "opencode".to_string(),
|
|
original_ids: Some(HashMap::from([
|
|
("session_id".to_string(), "ses_abc123xyz".to_string()),
|
|
("project_id".to_string(), "proj_456".to_string()),
|
|
])),
|
|
raw_excerpt: Some(serde_json::json!({
|
|
"version": "0.15.31",
|
|
"share": null
|
|
})),
|
|
}),
|
|
extra: HashMap::new(),
|
|
};
|
|
|
|
let with_meta = SessionMetadata {
|
|
project_path: "/workspace/project".to_string(),
|
|
model: Some("gpt-4-turbo".to_string()),
|
|
total_messages: 15,
|
|
system_message: Some("System prompt here".to_string()),
|
|
current_mode_id: Some("architect".to_string()),
|
|
_meta: Some(meta),
|
|
project_id: None,
|
|
};
|
|
let json = serde_json::to_string_pretty(&with_meta).unwrap();
|
|
println!("{}\n", json);
|
|
|
|
// Example 4: Full Session object
|
|
println!("4. Complete Session with all metadata fields:");
|
|
let now = Utc::now();
|
|
let session = Session {
|
|
id: "ses_demo_123".to_string(),
|
|
title: "My Coding Session".to_string(),
|
|
created_at: now,
|
|
updated_at: now,
|
|
metadata: with_meta,
|
|
models: None,
|
|
modes: None,
|
|
config_options: None,
|
|
acp_client_id: None,
|
|
cwd: None,
|
|
};
|
|
let json = serde_json::to_string_pretty(&session).unwrap();
|
|
println!("{}\n", json);
|
|
|
|
// Example 5: Verify backward compatibility
|
|
println!("5. Backward compatibility test (deserializing old format):");
|
|
let old_json = r#"{
|
|
"project_path": "/old/project",
|
|
"model": "gpt-3.5",
|
|
"total_messages": 3
|
|
}"#;
|
|
|
|
let parsed: SessionMetadata = serde_json::from_str(old_json).unwrap();
|
|
println!("Successfully parsed old JSON format:");
|
|
println!(" project_path: {}", parsed.project_path);
|
|
println!(" model: {:?}", parsed.model);
|
|
println!(" total_messages: {}", parsed.total_messages);
|
|
println!(" system_message: {:?}", parsed.system_message);
|
|
println!(" current_mode_id: {:?}", parsed.current_mode_id);
|
|
println!(" _meta: {:?}", parsed._meta);
|
|
}
|