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}