Skip to content

Commit

Permalink
Remove Simd-json (#228)
Browse files Browse the repository at this point in the history
This mirrors the serenity pr serenity-rs/serenity#2735.
  • Loading branch information
Erk- authored and GnomedDev committed Aug 5, 2024
1 parent 1aba8f1 commit 73f4b96
Show file tree
Hide file tree
Showing 11 changed files with 33 additions and 73 deletions.
5 changes: 0 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ jobs:
- Windows
- driver only
- gateway only
- simd json
include:
- name: beta
toolchain: beta
Expand All @@ -53,10 +52,6 @@ jobs:
- name: gateway only
features: gateway serenity tungstenite rustls
dont-test: true
- name: simd json
features: simd-json serenity tungstenite rustls driver gateway serenity?/simd_json
rustflags: -C target-cpu=native
dont-test: true
steps:
- name: Checkout sources
uses: actions/checkout@v3
Expand Down
1 change: 0 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ serde-aux = { optional = true, version = "4"}
serde_json = "1"
serenity = { default-features = false, optional = true, version = "0.12.0", features = ["voice", "gateway"] }
serenity-voice-model = { optional = true, version = "0.2" }
simd-json = { features = ["serde_impl"], optional = true, version = "0.13" }
socket2 = { optional = true, version = "0.5" }
streamcatcher = { optional = true, version = "1" }
stream_lib = { default-features = false, optional = true, version = "0.4.2" }
Expand Down
11 changes: 0 additions & 11 deletions Makefile.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,6 @@ args = ["fmt", "--all"]
args = ["build", "--features", "full-doc"]
dependencies = ["format"]

[tasks.build-simd]
args = ["build", "--features", "full-doc,simd-json,serenity?/simd_json,twilight-gateway?/simd-json"]
command = "cargo"
dependencies = ["format"]
env = { "RUSTFLAGS" = "-C target-cpu=native" }

[tasks.build-examples]
args = ["build", "--manifest-path", "./examples/Cargo.toml", "--workspace"]
command = "cargo"
Expand Down Expand Up @@ -43,11 +37,6 @@ dependencies = ["format"]
[tasks.test]
args = ["test", "--features", "full-doc"]

[tasks.test-simd]
args = ["test", "--features", "full-doc,simd-json,serenity?/simd_json,twilight-gateway?/simd-json"]
command = "cargo"
env = { "RUSTFLAGS" = "-C target-cpu=native" }

[tasks.bench]
description = "Runs performance benchmarks."
category = "Test"
Expand Down
1 change: 0 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ The library offers:
a `ConnectionInfo` using any other gateway, or language for your bot, then you
can run the songbird voice driver.
* Voice receive and RT(C)P packet handling via the `"receive"` feature.
* SIMD-accelerated JSON decoding via the `"simd-json"` feature.
* And, by default, a fully featured voice system featuring events, queues,
seeking on compatible streams, shared multithreaded audio stream caches,
and direct Opus data passthrough from DCA files.
Expand Down
2 changes: 0 additions & 2 deletions src/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ use futures::channel::mpsc::TrySendError;
pub use serde_json::Error as JsonError;
#[cfg(feature = "serenity")]
use serenity::gateway::ShardRunnerMessage;
#[cfg(feature = "simd-json")]
pub use simd_json::Error as JsonError;
#[cfg(feature = "gateway")]
use std::{error::Error, fmt};
#[cfg(feature = "twilight")]
Expand Down
2 changes: 1 addition & 1 deletion src/input/adapters/cached/compressed.rs
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ impl Compressed {
)?;
let mut metabytes = b"DCA1\0\0\0\0".to_vec();
let orig_len = metabytes.len();
crate::json::to_writer(&mut metabytes, &metadata)?;
serde_json::to_writer(&mut metabytes, &metadata)?;
let meta_len = (metabytes.len() - orig_len)
.try_into()
.map_err(|_| CodecCacheError::MetadataTooLarge)?;
Expand Down
6 changes: 2 additions & 4 deletions src/input/codecs/dca/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -109,11 +109,9 @@ impl FormatReader for DcaReader {
return symph_err::decode_error("missing DCA1 metadata block");
}

let mut raw_json = source.read_boxed_slice_exact(size as usize)?;
let raw_json = source.read_boxed_slice_exact(size as usize)?;

// NOTE: must be mut for simd-json.
#[allow(clippy::unnecessary_mut_passed)]
let metadata: DcaMetadata = crate::json::from_slice::<DcaMetadata>(&mut raw_json)
let metadata: DcaMetadata = serde_json::from_slice::<DcaMetadata>(&raw_json)
.map_err(|_| SymphError::DecodeError("malformed DCA1 metadata block"))?;

let mut revision = MetadataBuilder::new();
Expand Down
2 changes: 1 addition & 1 deletion src/input/metadata/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ pub struct AuxMetadata {
impl AuxMetadata {
/// Extract metadata and details from the output of `ffprobe -of json`.
pub fn from_ffprobe_json(value: &mut [u8]) -> Result<Self, JsonError> {
let output: ffprobe::Output = crate::json::from_slice(value)?;
let output: ffprobe::Output = serde_json::from_slice(value)?;

Ok(output.into_aux_metadata())
}
Expand Down
8 changes: 4 additions & 4 deletions src/input/sources/ytdl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ impl<'a> YoutubeDl<'a> {
"--no-playlist",
];

let mut output = Command::new(self.program)
let output = Command::new(self.program)
.args(ytdl_args)
.output()
.await
Expand All @@ -153,11 +153,11 @@ impl<'a> YoutubeDl<'a> {
));
}

// NOTE: must be split_mut for simd-json.
let out = output
.stdout
.split_mut(|&b| b == b'\n')
.filter_map(|x| (!x.is_empty()).then(|| crate::json::from_slice(x)))
.split(|&b| b == b'\n')
.filter(|&x| (!x.is_empty()))
.map(|x| serde_json::from_slice(x))
.collect::<Result<Vec<Output>, _>>()
.map_err(|e| AudioStreamError::Fail(Box::new(e)))?;

Expand Down
4 changes: 0 additions & 4 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -113,11 +113,7 @@ pub use discortp as packet;
#[cfg(feature = "driver")]
pub use serenity_voice_model as model;

// Re-export serde-json APIs locally to minimise conditional config elsewhere.
#[cfg(not(feature = "simd-json"))]
pub(crate) use serde_json as json;
#[cfg(feature = "simd-json")]
pub(crate) use simd_json::serde as json;

#[cfg(feature = "driver")]
pub use crate::{
Expand Down
64 changes: 25 additions & 39 deletions src/ws.rs
Original file line number Diff line number Diff line change
Expand Up @@ -128,57 +128,43 @@ impl From<TwsError> for Error {
}

#[inline]
#[allow(unused_unsafe)]
pub(crate) fn convert_ws_message(message: Option<Message>) -> Result<Option<Event>> {
#[cfg(feature = "tungstenite")]
return Ok(match message {
// SAFETY:
// simd-json::serde::from_str may leave an &mut str in a non-UTF state on failure.
// The below is safe as we have taken ownership of the inner `String`, and if
// failure occurs we forcibly re-validate its contents before logging.
Some(Message::Text(mut payload)) =>
(unsafe { crate::json::from_str(payload.as_mut_str()) })
.map_err(|e| {
let safe_payload = String::from_utf8_lossy(payload.as_bytes());
debug!("Unexpected JSON: {e}. Payload: {safe_payload}");
e
})
.ok(),
let text = match message {
Some(Message::Text(ref payload)) => payload,
Some(Message::Binary(bytes)) => {
return Err(Error::UnexpectedBinaryMessage(bytes));
},
Some(Message::Close(Some(frame))) => {
return Err(Error::WsClosed(Some(frame)));
},
// Ping/Pong message behaviour is internally handled by tungstenite.
_ => None,
});
_ => return Ok(None),
};
#[cfg(feature = "tws")]
return Ok(if let Some(message) = message {
if message.is_text() {
let mut payload = message.as_text().unwrap().to_owned();
// SAFETY:
// simd-json::serde::from_str may leave an &mut str in a non-UTF state on failure.
// The below is safe as we have created an owned copy of the payload `&str`, and if
// failure occurs we forcibly re-validate its contents before logging.
(unsafe { crate::json::from_str(payload.as_mut_str()) })
.map_err(|e| {
let safe_payload = String::from_utf8_lossy(payload.as_bytes());
debug!("Unexpected JSON: {e}. Payload: {safe_payload}");
e
})
.ok()
} else if message.is_binary() {
let text = match message {
Some(ref message) if message.is_text() =>
if let Some(text) = message.as_text() {
text
} else {
return Ok(None);
},
Some(message) if message.is_binary() => {
return Err(Error::UnexpectedBinaryMessage(
message.into_payload().to_vec(),
));
} else if message.is_close() {
},
Some(message) if message.is_close() => {
return Err(Error::WsClosed(message.as_close().map(|(c, _)| c)));
} else {
// ping/pong; will also be internally handled by tokio-websockets
None
}
} else {
None
});
},
// ping/pong; will also be internally handled by tokio-websockets.
_ => return Ok(None),
};

Ok(serde_json::from_str(text)
.map_err(|e| {
debug!("Unexpected JSON: {e}. Payload: {text}");
e
})
.ok())
}

0 comments on commit 73f4b96

Please sign in to comment.