Skip to main content

nex_core/
contract.rs

1use serde::{Deserialize, Serialize};
2
3use crate::model::SearchItem;
4
5#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
6pub struct SearchRequest {
7    pub query: String,
8    pub limit: Option<usize>,
9}
10
11#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
12pub struct SearchResultDto {
13    pub id: String,
14    pub kind: String,
15    pub title: String,
16    pub path: String,
17}
18
19#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
20pub struct SearchResponse {
21    pub results: Vec<SearchResultDto>,
22}
23
24#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
25pub struct LaunchRequest {
26    pub id: Option<String>,
27    pub path: Option<String>,
28}
29
30#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
31pub struct LaunchResponse {
32    pub launched: bool,
33}
34
35#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
36#[serde(tag = "kind", content = "payload")]
37pub enum CoreRequest {
38    Search(SearchRequest),
39    Launch(LaunchRequest),
40}
41
42#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
43#[serde(tag = "kind", content = "payload")]
44pub enum CoreResponse {
45    Search(SearchResponse),
46    Launch(LaunchResponse),
47}
48
49impl From<SearchItem> for SearchResultDto {
50    fn from(value: SearchItem) -> Self {
51        Self {
52            id: value.id,
53            kind: value.kind,
54            title: value.title,
55            path: value.path,
56        }
57    }
58}