diff --git a/src/anybase.rs b/src/anybase.rs index ea839c3..156ef09 100644 --- a/src/anybase.rs +++ b/src/anybase.rs @@ -91,10 +91,10 @@ pub mod bytes { /// Encodes from bytes into catspeak /// /// ``` - /// use cat2text::{anybase::bytes::encode, core::char_length}; + /// use cat2text::{anybase::bytes::encode, core::bytes::char_length}; /// - /// let bytes = &[9, 1]; - /// let base = 10; + /// let bytes = &[243]; + /// let base = 16; /// let char_length = char_length(base); /// /// assert_eq!("meow mewo meow mrrp", encode(bytes, base, char_length)); @@ -114,9 +114,9 @@ pub mod bytes { /// Decodes catspeak into bytes /// /// ``` - /// use cat2text::{anybase::bytes::decode, core::char_length}; + /// use cat2text::{anybase::bytes::decode, core::bytes::char_length}; /// - /// let text = "mreow mrrp meow mrrp".to_string(); + /// let text = "mrrp nyaaaa~ meow".to_string(); /// let base = 10; /// let char_length = char_length(base); /// diff --git a/src/base4.rs b/src/base4.rs index a4f66f5..6e0073d 100644 --- a/src/base4.rs +++ b/src/base4.rs @@ -9,11 +9,6 @@ pub fn alphabet() -> Vec<String> { return tmp; } -/// How many words long an english character is when translated to catspeak -pub fn char_length() -> u32 { - return 3; -} - /// Encodes english text into base 4 catspeak /// /// ``` @@ -22,7 +17,7 @@ pub fn char_length() -> u32 { /// assert_eq!("meow mreow mrrp; meow mrow meow meow mrow mrow mrrp mrrp mreow meow mrrp mrrp; meow meow mrow meow meow mrrp mrrp mrrp meow mrrp meow mrow", encode("i love cats".to_string())) /// ``` pub fn encode(text: impl AsRef<str>) -> String { - return anybase::encode(text.as_ref().to_string(), 4, char_length()); + return anybase::encode(text.as_ref().to_string(), 4, core::char_length(4)); } /// Decodes base 4 catspeak to english text @@ -33,22 +28,22 @@ pub fn encode(text: impl AsRef<str>) -> String { /// assert_eq!("i love cats", decode("meow mreow mrrp; meow mrow meow meow mrow mrow mrrp mrrp mreow meow mrrp mrrp; meow meow mrow meow meow mrrp mrrp mrrp meow mrrp meow mrow".to_string())); /// ``` pub fn decode(text: String) -> String { - return anybase::decode(text, 4, char_length()); + return anybase::decode(text, 4, core::char_length(4)); } pub mod bytes { //! This handles encoding and decoding bytes to/from catspeak - use super::char_length; use crate::anybase; + use crate::core::bytes::char_length; /// Encodes from bytes into catspeak /// /// ``` /// use cat2text::base4::bytes::encode; /// - /// assert_eq!("meow mreow mrrp meow meow mrrp", encode(&[9, 1])); + /// assert_eq!("meow mreow mrrp meow meow mrrp", encode(&[253..., 1])); /// ``` pub fn encode(bytes: impl AsRef<[u8]>) -> String { - anybase::bytes::encode(bytes, 4, char_length()) + anybase::bytes::encode(bytes, 4, char_length(4)) } /// Decodes catspeak into bytes @@ -59,6 +54,6 @@ pub mod bytes { /// assert_eq!(vec![9, 1], decode("meow mreow mrrp meow meow mrrp".to_string())); /// ``` pub fn decode(text: String) -> Vec<u8> { - anybase::bytes::decode(text, 4, char_length()) + anybase::bytes::decode(text, 4, char_length(4)) } } diff --git a/src/core.rs b/src/core.rs index 113a1b0..646056b 100644 --- a/src/core.rs +++ b/src/core.rs @@ -135,3 +135,23 @@ pub fn char_length(base: u32) -> u32 { } return u32::MAX; } + +pub mod bytes { + /// Returns the minimum catspeak words per character needed for this base for bytes + /// + /// ``` + /// use cat2text::core::bytes::char_length; + /// + /// let base = 16; + /// assert_eq!(char_length(base), 2) + /// ``` + pub fn char_length(base: u32) -> u32 { + for i in 1..base + 1 { + let num = base.pow(i); + if num > 255 { + return i; + } + } + return u32::MAX; + } +}