Skip to content

Commit 5c8c56d

Browse files
DavisVaughanlionel-
authored andcommitted
Move the full reply to its own file, but use KernelInfoReply name everywhere
1 parent e2f2116 commit 5c8c56d

File tree

5 files changed

+81
-62
lines changed

5 files changed

+81
-62
lines changed

crates/amalthea/src/socket/shell.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ use crate::wire::jupyter_message::JupyterMessage;
4242
use crate::wire::jupyter_message::Message;
4343
use crate::wire::jupyter_message::ProtocolMessage;
4444
use crate::wire::jupyter_message::Status;
45-
use crate::wire::kernel_info_reply::KernelInfoReplyFull;
45+
use crate::wire::kernel_info_full_reply;
4646
use crate::wire::originator::Originator;
4747
use crate::wire::status::ExecutionState;
4848
use crate::wire::status::KernelStatus;
@@ -128,9 +128,8 @@ impl Shell {
128128
let shell_handler = &mut self.shell_handler.borrow_mut();
129129
match msg {
130130
Message::KernelInfoRequest(req) => self.handle_request(req.clone(), |msg| {
131-
let reply: KernelInfoReplyFull =
132-
block_on(shell_handler.handle_info_request(msg))?.into();
133-
Ok(reply)
131+
block_on(shell_handler.handle_info_request(msg))
132+
.map(kernel_info_full_reply::KernelInfoReply::from)
134133
}),
135134
Message::IsCompleteRequest(req) => self.handle_request(req, |msg| {
136135
block_on(shell_handler.handle_is_complete_request(msg))

crates/amalthea/src/wire/jupyter_message.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use serde::Serialize;
1111
use super::display_data::DisplayData;
1212
use super::handshake_reply::HandshakeReply;
1313
use super::handshake_request::HandshakeRequest;
14-
use super::kernel_info_reply::KernelInfoReplyFull;
14+
use super::kernel_info_full_reply::KernelInfoReply;
1515
use super::stream::StreamOutput;
1616
use super::update_display_data::UpdateDisplayData;
1717
use super::welcome::Welcome;
@@ -81,7 +81,7 @@ impl<T> ProtocolMessage for T where T: MessageType + Serialize + std::fmt::Debug
8181
#[derive(Debug)]
8282
pub enum Message {
8383
// Shell
84-
KernelInfoReply(JupyterMessage<KernelInfoReplyFull>),
84+
KernelInfoReply(JupyterMessage<KernelInfoReply>),
8585
KernelInfoRequest(JupyterMessage<KernelInfoRequest>),
8686
CompleteReply(JupyterMessage<CompleteReply>),
8787
CompleteRequest(JupyterMessage<CompleteRequest>),
@@ -197,7 +197,7 @@ impl TryFrom<&WireMessage> for Message {
197197
if kind == KernelInfoRequest::message_type() {
198198
return Ok(Message::KernelInfoRequest(JupyterMessage::try_from(msg)?));
199199
}
200-
if kind == KernelInfoReplyFull::message_type() {
200+
if kind == KernelInfoReply::message_type() {
201201
return Ok(Message::KernelInfoReply(JupyterMessage::try_from(msg)?));
202202
}
203203
if kind == IsCompleteRequest::message_type() {
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
/*
2+
* kernel_info_full_reply.rs
3+
*
4+
* Copyright (C) 2024 Posit Software, PBC. All rights reserved.
5+
*
6+
*/
7+
8+
use serde::Deserialize;
9+
use serde::Serialize;
10+
11+
use crate::wire::help_link::HelpLink;
12+
use crate::wire::jupyter_message::MessageType;
13+
use crate::wire::jupyter_message::Status;
14+
use crate::wire::kernel_info_reply;
15+
use crate::wire::language_info::LanguageInfo;
16+
17+
/// Complete version of `kernel_info_reply`
18+
///
19+
/// Private to Amalthea. Includes fields owned by Amalthea such as the protocol
20+
/// version and feature flags.
21+
///
22+
/// Kernel authors should use [kernel_info_reply::KernelInfoReply] instead.
23+
#[derive(Debug, Serialize, Deserialize, Clone)]
24+
pub struct KernelInfoReply {
25+
/// Version of messaging protocol
26+
pub protocol_version: String,
27+
28+
/// List of feature flags supported by the kernel. See JEP 92.
29+
pub supported_features: Vec<String>,
30+
31+
/// The execution status ("ok" or "error")
32+
pub status: Status,
33+
34+
/// Information about the language the kernel supports
35+
pub language_info: LanguageInfo,
36+
37+
/// A startup banner
38+
pub banner: String,
39+
40+
/// Whether debugging is supported
41+
pub debugger: bool,
42+
43+
/// A list of help links
44+
pub help_links: Vec<HelpLink>,
45+
}
46+
47+
impl MessageType for KernelInfoReply {
48+
fn message_type() -> String {
49+
String::from("kernel_info_reply")
50+
}
51+
}
52+
53+
/// Adds Amalthea fields to partial [kernel_info_reply::KernelInfoReply].
54+
impl From<kernel_info_reply::KernelInfoReply> for KernelInfoReply {
55+
fn from(value: kernel_info_reply::KernelInfoReply) -> Self {
56+
Self {
57+
// These fields are set by Amalthea
58+
protocol_version: String::from("5.4"),
59+
supported_features: vec![String::from("iopub_welcome")],
60+
61+
// These fields are set by the Amalthea user
62+
status: value.status,
63+
language_info: value.language_info,
64+
banner: value.banner,
65+
debugger: value.debugger,
66+
help_links: value.help_links,
67+
}
68+
}
69+
}
Lines changed: 5 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,23 @@
11
/*
22
* kernel_info_reply.rs
33
*
4-
* Copyright (C) 2022 Posit Software, PBC. All rights reserved.
4+
* Copyright (C) 2022-2024 Posit Software, PBC. All rights reserved.
55
*
66
*/
77

88
use serde::Deserialize;
99
use serde::Serialize;
1010

1111
use crate::wire::help_link::HelpLink;
12-
use crate::wire::jupyter_message::MessageType;
1312
use crate::wire::jupyter_message::Status;
1413
use crate::wire::language_info::LanguageInfo;
1514

16-
/// Represents a reply to a kernel_info_request
17-
#[derive(Debug, Serialize, Deserialize, Clone)]
18-
pub struct KernelInfoReply {
19-
/// The execution status ("ok" or "error")
20-
pub status: Status,
21-
22-
/// Information about the language the kernel supports
23-
pub language_info: LanguageInfo,
24-
25-
/// A startup banner
26-
pub banner: String,
27-
28-
/// Whether debugging is supported
29-
pub debugger: bool,
30-
31-
/// A list of help links
32-
pub help_links: Vec<HelpLink>,
33-
}
34-
35-
/// Complete version of `kernel_info_request`.
15+
/// Represents a reply to a `kernel_info_request`
3616
///
37-
/// Private to Amalthea. Includes fields owned by Amalthea such as the protocol
38-
/// version and feature flags
17+
/// When implementing a kernel, use this struct. Amalthea is in charge of
18+
/// providing the `protocol_version` to complete the reply.
3919
#[derive(Debug, Serialize, Deserialize, Clone)]
40-
pub struct KernelInfoReplyFull {
41-
/// Version of messaging protocol
42-
pub protocol_version: String,
43-
44-
/// List of feature flags supported by the kernel. See JEP 92.
45-
pub supported_features: Vec<String>,
46-
20+
pub struct KernelInfoReply {
4721
/// The execution status ("ok" or "error")
4822
pub status: Status,
4923

@@ -59,27 +33,3 @@ pub struct KernelInfoReplyFull {
5933
/// A list of help links
6034
pub help_links: Vec<HelpLink>,
6135
}
62-
63-
impl MessageType for KernelInfoReplyFull {
64-
fn message_type() -> String {
65-
String::from("kernel_info_reply")
66-
}
67-
}
68-
69-
/// Adds Amalthea fields to `KernelInfoReply`.
70-
impl From<KernelInfoReply> for KernelInfoReplyFull {
71-
fn from(value: KernelInfoReply) -> Self {
72-
Self {
73-
// These fields are set by Amalthea
74-
protocol_version: String::from("5.4"),
75-
supported_features: vec![String::from("iopub_welcome")],
76-
77-
// These fields are set by the Amalthea user
78-
status: value.status,
79-
language_info: value.language_info,
80-
banner: value.banner,
81-
debugger: value.debugger,
82-
help_links: value.help_links,
83-
}
84-
}
85-
}

crates/amalthea/src/wire/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ pub mod interrupt_request;
3434
pub mod is_complete_reply;
3535
pub mod is_complete_request;
3636
pub mod jupyter_message;
37+
pub mod kernel_info_full_reply;
3738
pub mod kernel_info_reply;
3839
pub mod kernel_info_request;
3940
pub mod language_info;

0 commit comments

Comments
 (0)