kernel_sidecar/jupyter/shell_content/
kernel_info.rs

1/*
2Ref: https://jupyter-client.readthedocs.io/en/latest/messaging.html#kernel-info
3*/
4
5use crate::jupyter::header::Header;
6use crate::jupyter::message::Message;
7use crate::jupyter::request::Request;
8use bytes::Bytes;
9use serde::{Deserialize, Serialize};
10
11// KernelInfoRequest, related sub-structs, and impls
12#[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// KernelInfoReply, related sub-structs, and impls
40#[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}