Skip to main content

codemode/
request.rs

1use std::time::Duration;
2
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6/// Request handled by [`CodeMode`](crate::CodeMode).
7#[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/// Response returned by [`CodeMode`](crate::CodeMode).
15#[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/// Executes JavaScript code inside the codemode engine.
23///
24/// `code` is expected to be an async zero-argument closure:
25/// `async () => { ... }`
26#[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/// Searches available packages/code exposed by package providers.
34#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
35pub struct SearchCode {
36    pub query: String,
37    pub limit: Option<usize>,
38}
39
40/// Structured result of a [`RunCode`] request.
41#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
42pub struct RunCodeResult {
43    pub value: Value,
44    pub duration: Duration,
45}
46
47/// Structured result of a [`SearchCode`] request.
48#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
49pub struct SearchCodeResult {
50    pub matches: Vec<PackageMatch>,
51}
52
53/// A package hit returned from [`SearchCode`].
54#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
55pub struct PackageMatch {
56    pub name: String,
57    pub snippet: Option<String>,
58}