From 364870e0418d3498f2215d2ccae6c9ba90508839 Mon Sep 17 00:00:00 2001 From: legop3 Date: Sat, 13 Jun 2026 22:31:06 -0400 Subject: [PATCH] slopfixing config file snowflake issues --- README.md | 8 ++++---- sipcord-bridge/src/routing/static_router.rs | 8 ++++---- sipcord-bridge/src/services/snowflake.rs | 17 +++++++++++++++++ 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 054927d..36d1dcb 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,8 @@ This is a slice of the code that powers [SIPcord](https://sipcord.net/) that you This means you have to build the call routing backend yourself. I am including a `static-router` backend which you can use to map extensions in a TOML file like this ```toml [extensions] -1000 = { guild = 123456789012345620, channel = 987654321012345620 } -2000 = { guild = 123456789012345620, channel = 111222333444555620 } +1000 = { guild = "123456789012345620", channel = "987654321012345620" } +2000 = { guild = "123456789012345620", channel = "111222333444555620" } ``` but if you want more fancy routing you have to build it. You can easily use sipcord-bridge as a library and provide your own routers by implementing the `Backend` trait. @@ -48,8 +48,8 @@ Create a `dialplan.toml` mapping extensions to Discord channels: ```toml [extensions] -1000 = { guild = 123456789012345678, channel = 987654321012345678 } -2000 = { guild = 123456789012345678, channel = 111222333444555666 } +1000 = { guild = "123456789012345678", channel = "987654321012345678" } +2000 = { guild = "123456789012345678", channel = "111222333444555666" } ``` Each extension is what you'll dial from your SIP phone. Pick any numbers you like. diff --git a/sipcord-bridge/src/routing/static_router.rs b/sipcord-bridge/src/routing/static_router.rs index 838ebeb..7d0fb18 100644 --- a/sipcord-bridge/src/routing/static_router.rs +++ b/sipcord-bridge/src/routing/static_router.rs @@ -8,8 +8,8 @@ //! Example `dialplan.toml`: //! ```toml //! [extensions] -//! 1000 = { guild = 123456789012345678, channel = 987654321012345678 } -//! 2000 = { guild = 123456789012345678, channel = 111222333444555666 } +//! 1000 = { guild = "123456789012345678", channel = "987654321012345678" } +//! 2000 = { guild = "123456789012345678", channel = "111222333444555666" } //! ``` use std::collections::HashMap; @@ -128,8 +128,8 @@ mod tests { fn test_load_valid_dialplan() { let toml_content = r#" [extensions] -1000 = { guild = 123456789012345678, channel = 987654321012345678 } -2000 = { guild = 123456789012345678, channel = 111222333444555666 } +1000 = { guild = "123456789012345678", channel = "987654321012345678" } +2000 = { guild = "123456789012345678", channel = "111222333444555666" } "#; let dir = std::env::temp_dir().join("sipcord_test_dialplan"); std::fs::create_dir_all(&dir).ok(); diff --git a/sipcord-bridge/src/services/snowflake.rs b/sipcord-bridge/src/services/snowflake.rs index c98cfc8..1ceed57 100644 --- a/sipcord-bridge/src/services/snowflake.rs +++ b/sipcord-bridge/src/services/snowflake.rs @@ -114,6 +114,12 @@ impl<'de> serde::Deserialize<'de> for Snowflake { Ok(Snowflake(v)) } + fn visit_i64(self, v: i64) -> Result { + u64::try_from(v) + .map(Snowflake) + .map_err(|_| E::custom("snowflake cannot be negative")) + } + fn visit_str(self, v: &str) -> Result { v.parse::().map(Snowflake).map_err(E::custom) } @@ -178,4 +184,15 @@ mod tests { let back: Snowflake = serde_json::from_str("\"80351110224678912\"").unwrap(); assert_eq!(back.get(), 80_351_110_224_678_912); } + + #[test] + fn serde_from_toml_integer() { + #[derive(serde::Deserialize)] + struct Wrapper { + id: Snowflake, + } + + let back: Wrapper = toml::from_str("id = 80351110224678912").unwrap(); + assert_eq!(back.id.get(), 80_351_110_224_678_912); + } }