Add unicode compatibility for identifiers
Fix issue with unicode character boundaries in parse_id. Add Unit test for unicode room aliases.
This commit is contained in:
parent
2de6d5dc0a
commit
3a4041982c
21
src/lib.rs
21
src/lib.rs
@ -210,16 +210,12 @@ fn validate_id<'a>(id: &'a str) -> Result<(), Error> {
|
|||||||
fn parse_id<'a>(required_sigil: char, id: &'a str) -> Result<(&'a str, Host, u16), Error> {
|
fn parse_id<'a>(required_sigil: char, id: &'a str) -> Result<(&'a str, Host, u16), Error> {
|
||||||
validate_id(id)?;
|
validate_id(id)?;
|
||||||
|
|
||||||
let mut chars = id.chars();
|
if !id.starts_with(required_sigil) {
|
||||||
|
|
||||||
let sigil = chars.nth(0).expect("ID missing first character.");
|
|
||||||
|
|
||||||
if sigil != required_sigil {
|
|
||||||
return Err(Error::MissingSigil);
|
return Err(Error::MissingSigil);
|
||||||
}
|
}
|
||||||
|
|
||||||
let delimiter_index = match chars.position(|c| c == ':') {
|
let delimiter_index = match id.find(':') {
|
||||||
Some(index) => index + 1,
|
Some(index) => index,
|
||||||
None => return Err(Error::MissingDelimiter),
|
None => return Err(Error::MissingDelimiter),
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -922,6 +918,16 @@ mod tests {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn valid_room_alias_id_unicode() {
|
||||||
|
assert_eq!(
|
||||||
|
RoomAliasId::try_from("#老虎£я:example.com")
|
||||||
|
.expect("Failed to create RoomAliasId.")
|
||||||
|
.to_string(),
|
||||||
|
"#老虎£я:example.com"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn missing_room_alias_id_sigil() {
|
fn missing_room_alias_id_sigil() {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
@ -953,6 +959,7 @@ mod tests {
|
|||||||
Error::InvalidHost
|
Error::InvalidHost
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn valid_room_id() {
|
fn valid_room_id() {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user