kernel_sidecar/jupyter/shell_content/
kernel_info.rs1use crate::jupyter::header::Header;
6use crate::jupyter::message::Message;
7use crate::jupyter::request::Request;
8use bytes::Bytes;
9use serde::{Deserialize, Serialize};
10
11#[derive(Serialize, Deserialize, Debug, Clone)]
13pub struct KernelInfoRequest {}
14
15impl Default for KernelInfoRequest {
16 fn default() -> Self {
17 Self::new()
18 }
19}
20
21impl KernelInfoRequest {
22 pub fn new() -> Self {
23 KernelInfoRequest {}
24 }
25}
26
27impl From<KernelInfoRequest> for Request {
28 fn from(req: KernelInfoRequest) -> Self {
29 let msg = Message {
30 header: Header::new("kernel_info_request".to_owned()),
31 parent_header: None,
32 metadata: None,
33 content: req,
34 };
35 Request::KernelInfo(msg)
36 }
37}
38
39#[derive(Serialize, Deserialize, Debug)]
41struct HelpLink {
42 text: String,
43 url: String,
44}
45
46#[derive(Serialize, Deserialize, Debug)]
47struct LanguageInfo {
48 name: String,
49 version: String,
50 mimetype: String,
51 file_extension: String,
52 pygments_lexer: Option<String>,
53 codemirror_mode: Option<serde_json::Value>,
54 nbconvert_exporter: Option<String>,
55}
56
57#[derive(Serialize, Deserialize, Debug)]
58pub struct KernelInfoReply {
59 banner: String,
60 help_links: Option<Vec<HelpLink>>,
61 implementation: String,
62 implementation_version: String,
63 language_info: LanguageInfo,
64 protocol_version: String,
65 status: String,
66}
67
68impl From<Bytes> for KernelInfoReply {
69 fn from(bytes: Bytes) -> Self {
70 let reply: KernelInfoReply = serde_json::from_slice(&bytes)
71 .expect("Failed to deserialize ZMQ bytes to KernelInfoReply");
72 reply
73 }
74}