mirror of
https://github.com/nushell/nushell.git
synced 2025-06-08 02:57:06 +02:00
<!-- if this PR closes one or more issues, you can automatically link the PR with them by using one of the [*linking keywords*](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword), e.g. - this PR should close #xxxx - fixes #xxxx you can also mention related issues, PRs or discussions! --> # Description <!-- Thank you for improving Nushell. Please, check our [contributing guide](../CONTRIBUTING.md) and talk to the core team before making major changes. Description of your pull request goes here. **Provide examples and/or screenshots** if your changes affect the user experience. --> Added comments to support API docs for the `nu-plugin` crate. Removed a few items that I'd expect should only be used internally to Nushell from the documentation and reduced the visibility of some items that did not need to be public. # User-Facing Changes <!-- List of all changes that impact the user experience here. This helps us keep track of breaking changes. --> There should be no user facing impact. # Tests + Formatting <!-- Don't forget to add tests that cover your changes. Make sure you've run and fixed any issues with these commands: - `cargo fmt --all -- --check` to check standard code formatting (`cargo fmt --all` applies these changes) - `cargo clippy --workspace -- -D warnings -D clippy::unwrap_used -A clippy::needless_collect -A clippy::result_large_err` to check that you're using the standard code style - `cargo test --workspace` to check that all tests pass - `cargo run -- crates/nu-std/tests/run.nu` to run the tests for the standard library > **Note** > from `nushell` you can also use the `toolkit` as follows > ```bash > use toolkit.nu # or use an `env_change` hook to activate it automatically > toolkit check pr > ``` --> Standard tests run. Additionally numerous doctests were added to the `nu-plugin` crate. # After Submitting <!-- If your PR had any user-facing changes, update [the documentation](https://github.com/nushell/nushell.github.io) after the PR is merged, if necessary. This will help us keep the docs up to date. --> No changes to the website necessary.
75 lines
2.1 KiB
Rust
75 lines
2.1 KiB
Rust
use crate::{
|
|
plugin::PluginEncoder,
|
|
protocol::{PluginCall, PluginResponse},
|
|
};
|
|
use nu_protocol::ShellError;
|
|
|
|
pub mod json;
|
|
pub mod msgpack;
|
|
|
|
#[doc(hidden)]
|
|
#[derive(Clone, Debug)]
|
|
pub enum EncodingType {
|
|
Json(json::JsonSerializer),
|
|
MsgPack(msgpack::MsgPackSerializer),
|
|
}
|
|
|
|
impl EncodingType {
|
|
pub fn try_from_bytes(bytes: &[u8]) -> Option<Self> {
|
|
match bytes {
|
|
b"json" => Some(Self::Json(json::JsonSerializer {})),
|
|
b"msgpack" => Some(Self::MsgPack(msgpack::MsgPackSerializer {})),
|
|
_ => None,
|
|
}
|
|
}
|
|
|
|
pub fn encode_call(
|
|
&self,
|
|
plugin_call: &PluginCall,
|
|
writer: &mut impl std::io::Write,
|
|
) -> Result<(), ShellError> {
|
|
match self {
|
|
EncodingType::Json(encoder) => encoder.encode_call(plugin_call, writer),
|
|
EncodingType::MsgPack(encoder) => encoder.encode_call(plugin_call, writer),
|
|
}
|
|
}
|
|
|
|
pub fn decode_call(
|
|
&self,
|
|
reader: &mut impl std::io::BufRead,
|
|
) -> Result<PluginCall, ShellError> {
|
|
match self {
|
|
EncodingType::Json(encoder) => encoder.decode_call(reader),
|
|
EncodingType::MsgPack(encoder) => encoder.decode_call(reader),
|
|
}
|
|
}
|
|
|
|
pub fn encode_response(
|
|
&self,
|
|
plugin_response: &PluginResponse,
|
|
writer: &mut impl std::io::Write,
|
|
) -> Result<(), ShellError> {
|
|
match self {
|
|
EncodingType::Json(encoder) => encoder.encode_response(plugin_response, writer),
|
|
EncodingType::MsgPack(encoder) => encoder.encode_response(plugin_response, writer),
|
|
}
|
|
}
|
|
|
|
pub fn decode_response(
|
|
&self,
|
|
reader: &mut impl std::io::BufRead,
|
|
) -> Result<PluginResponse, ShellError> {
|
|
match self {
|
|
EncodingType::Json(encoder) => encoder.decode_response(reader),
|
|
EncodingType::MsgPack(encoder) => encoder.decode_response(reader),
|
|
}
|
|
}
|
|
|
|
pub fn to_str(&self) -> &'static str {
|
|
match self {
|
|
Self::Json(_) => "json",
|
|
Self::MsgPack(_) => "msgpack",
|
|
}
|
|
}
|
|
}
|