relay_knowledge/api/
context.rs1use std::time::{SystemTime, UNIX_EPOCH};
2
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
7#[serde(rename_all = "kebab-case")]
8pub enum InterfaceKind {
9 Cli,
11 Web,
13 Api,
15 Mcp,
17 Acp,
19}
20
21#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
23pub struct RequestContext {
24 pub interface: InterfaceKind,
25 pub request_id: String,
26 pub trace_id: String,
27}
28
29impl RequestContext {
30 pub fn for_interface(interface: InterfaceKind) -> Self {
32 let nanos = SystemTime::now()
33 .duration_since(UNIX_EPOCH)
34 .map_or(0, |duration| duration.as_nanos());
35
36 Self {
37 interface,
38 request_id: format!("req-{nanos}"),
39 trace_id: format!("trace-{nanos}"),
40 }
41 }
42
43 pub fn with_ids(
45 interface: InterfaceKind,
46 request_id: impl Into<String>,
47 trace_id: impl Into<String>,
48 ) -> Self {
49 Self {
50 interface,
51 request_id: request_id.into(),
52 trace_id: trace_id.into(),
53 }
54 }
55}