1use std::time::Duration;
2
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
8#[serde(tag = "kind", rename_all = "snake_case")]
9pub enum Request {
10 RunCode(RunCode),
11 SearchCode(SearchCode),
12}
13
14#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
16#[serde(tag = "kind", rename_all = "snake_case")]
17pub enum Response {
18 RunCode(RunCodeResult),
19 SearchCode(SearchCodeResult),
20}
21
22#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
27pub struct RunCode {
28 pub code: String,
29 #[serde(default)]
30 pub imports: Vec<String>,
31}
32
33#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
35pub struct SearchCode {
36 pub query: String,
37 pub limit: Option<usize>,
38}
39
40#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
42pub struct RunCodeResult {
43 pub value: Value,
44 pub duration: Duration,
45}
46
47#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
49pub struct SearchCodeResult {
50 pub matches: Vec<PackageMatch>,
51}
52
53#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
55pub struct PackageMatch {
56 pub name: String,
57 pub snippet: Option<String>,
58}