Commit graph

35 commits

Author SHA1 Message Date
xmppftw
b09c540080 Add tests for serde features of jid crate 2023-08-14 12:17:51 +00:00
mb
997303900b fix(jid): Fix JID serialization with serde; address oversight in commit cdf4486e 2023-08-14 12:17:51 +00:00
Emmanuel Gil Peyrot
2ad0dd66dd Replace format!("{}", jid) with jid.to_string()
This is more readable I think, and expresses better our intent.
2023-08-10 19:35:53 +00:00
Emmanuel Gil Peyrot
6fc3a46bd2 jid: Fix tests 2023-08-10 19:31:10 +00:00
Emmanuel Gil Peyrot
e6595762f6 Use the parts/str split in FullJid and BareJid too
Since 199b3ae7ae we allow typed parts to
be reused without stringprep being reapplied.  This extends it from just
Jid to FullJid and BareJid too.
2023-08-10 19:31:10 +00:00
Emmanuel Gil Peyrot
6ccee76621 Add a test for an invalid resource
This one uses unassigned codepoints in Unicode 3.2.
2023-08-05 16:53:22 +02:00
Emmanuel Gil Peyrot
11087d64f7 Add *Jid::into_inner() returning the inner String
Thanks pep. for the suggestion!
2023-07-30 15:23:02 +02:00
Emmanuel Gil Peyrot
6f304d197d jid: Optimise for no-transform JIDs
stringprep can make transformations to a JID, the most well-known one is
making the nodepart and domainpart lowercase but it does much more than
that.

It is extremely common to have to validate already-normalised JIDs
though, and since https://github.com/sfackler/rust-stringprep/pull/4
this is exactly what the stringprep crate does, by returning
Cow::Borrowed() for common ASCII-only cases.

This commit further reduces time spent by an additional -15%..-58% when
already using this stringprep improvement, in addition to the
89.5%..98.5% change brought by this improvement (and +1.3% total when
the JID isn’t normalised yet).

For instance, my own full JID parses in 1.83 µs before these changes,
132 ns with just the stringprep optimisation, and 46 ns with also this
commit, on an i7-8700K.
2023-07-16 19:50:12 +02:00
xmppftw
76b68e932a Update CHANGELOG for jid crate 2023-06-21 18:41:32 +02:00
xmppftw
4266368a98 JIDs now have typed and stringy methods for node/domain/resource access
Jid now has typed with_resource and stringy with_resource_str
Jid now has is_full, is_bare
2023-06-21 18:30:25 +02:00
xmppftw
199b3ae7ae Introduce typed Parts for the JID to enable unfallible JID construction 2023-06-21 14:15:03 +02:00
xmppftw
c86f0118b7 jid: Better docs for those types 2023-06-20 21:21:06 +02:00
Emmanuel Gil Peyrot
cdf4486e53 jid: Remove From<*Jid> for String
Use fmt::Display instead if you want this feature.
2023-06-20 18:59:26 +02:00
Emmanuel Gil Peyrot
ccf41fc1e8 jid: Rename errors to make them more consistent 2023-06-20 18:59:26 +02:00
Emmanuel Gil Peyrot
1904f0af6c jid: Rename error into Error
JidParseError is an ok name when imported elsewhere, but inside of this
crate it makes much more sense to name it Error.
2023-06-20 18:59:26 +02:00
xmppftw
2a3d393ad5 jid: Factorize length check for shorter code 2023-06-20 18:59:26 +02:00
Emmanuel Gil Peyrot
cf25bd3fee jid: Refactor all three JID types
The main reason for this refactor was to make common operations simpler,
for instance formatting a JID is now a simple clone of a String.

Instead of having three different String for each of node, domain and
resource, we now have a single String with offsets pointing to where the
at and slash are (if they are present).

This also reduces the size of a FullJid from 72 bytes to 32 bytes on
64-bit platforms (less so on 32-bit), and BareJid from 48 bytes to
32 bytes.  Jid is still 40 bytes instead of 32, but that can be improved
in a future version where InnerJid has been inlined into each struct.
2023-06-20 18:59:26 +02:00
Emmanuel Gil Peyrot
187e156b0b jid: Move JidParseError into its own module 2023-06-20 18:59:26 +02:00
Emmanuel Gil Peyrot
d867d8d7a1 jid: Replace icu with stringprep
This dependency is unmaintained, but it is written in pure Rust unlike
ICU, and doesn’t require a roundtrip through UTF-16, improving both
performances (perhaps?) and ease of compilation.
2023-06-20 18:59:26 +02:00
Emmanuel Gil Peyrot
a7dee0bef4 jid: Test for the size of our structs
This shows how big JIDs are represented on the stack and in other
structs.
2023-06-20 18:59:26 +02:00
4701f6bb69 jid: Rename Error::IcuError into Error::Stringprep
Avoir the "Error Error" pattern, and also use Stringprep instead of ICU

Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
2023-06-07 17:29:05 +02:00
xmppftw
2cafecb004 JID stringprep errors return a JidParseError instead of panic (#84) 2023-06-07 17:29:00 +02:00
xmppftw
8d9288ffd7 Implement From<&Jid> for String (close #69) 2023-05-28 22:27:40 +02:00
xmppftw
ce255d9602 Jid (de)serialization now uses untagged representation (close #66) 2023-05-28 19:54:51 +02:00
a91157aa80
jid: Add feature alias 'stringprep'
Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
2023-01-15 21:44:04 +01:00
Emmanuel Gil Peyrot
6eb25755a3 WIP: Add ICU bindings for stringprep, idna2008 and spoof checker. 2022-09-16 11:10:52 +02:00
Astro
b6618ffa3d jid: Release 0.9.4 2022-07-13 20:50:10 +02:00
Emmanuel Gil Peyrot
10f173db91 jid: Release 0.9.3 2022-03-07 12:12:02 +01:00
Emmanuel Gil Peyrot
e8359cffdc jid, xmpp-parsers: Bump minidom. 2022-02-16 21:11:56 +01:00
Emmanuel Gil Peyrot
9891cc48ac jid: Fix the issues reported by clippy 2021-10-11 16:17:09 +02:00
Emmanuel Gil Peyrot
c94c95de0e jid: Release 0.9.2 2021-01-13 11:46:05 +01:00
Emmanuel Gil Peyrot
3e4b6b55c9 jid: Release 0.9.1 2021-01-13 00:33:26 +01:00
Emmanuel Gil Peyrot
3df447de97 jid: Implement PartialEq between Jid and BareJid/FullJid.
This can be useful at times.
2020-12-10 20:45:01 +01:00
b85aa29377
Finish removing 'rs' suffix in libs
Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
2020-07-15 10:49:50 +02:00
Emmanuel Gil Peyrot
714d850e69 Remove the -rs suffix of jid, minidom and xmpp
We know those are Rust libraries, no need to add it to the path.  This
synchronises their directory with the crate name, hopefully reducing
confusion.
2020-06-22 02:17:32 +02:00