Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Difference From blather-0.10.0 To blather-0.10.1
|
2024-09-22
| ||
| 09:18 | Remove PartialEq from Error. Change Error::IO to carry std::io::Error. Lots of pedantic clippy fixes. check-in: 28c3fe56c4 user: jan tags: trunk | |
|
2024-08-06
| ||
| 13:06 | Relase maintenance. check-in: fcdac3ca7e user: jan tags: blather-0.10.1, trunk | |
| 13:02 | Happy clippy. check-in: 1a365cef19 user: jan tags: trunk | |
|
2024-05-01
| ||
| 05:25 | Add a utility function for receiving an expected telegram over a Frame'd stream. check-in: b4762b2871 user: jan tags: trunk | |
|
2024-02-23
| ||
| 14:32 | Changlog fixup. check-in: a73f934f4c user: jan tags: blather-0.10.0, trunk | |
| 14:31 | Release maintenance. check-in: 8d3690239e user: jan tags: trunk | |
Changes to .efiles.
1 2 3 4 5 6 7 8 9 10 11 12 13 | Cargo.toml README.md www/index.md www/changelog.md src/err.rs src/lib.rs src/types.rs src/types/telegram.rs src/types/params.rs src/types/kvlines.rs src/types/validators.rs src/codec.rs tests/*.rs | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Cargo.toml README.md www/index.md www/changelog.md src/err.rs src/lib.rs src/types.rs src/types/telegram.rs src/types/params.rs src/types/kvlines.rs src/types/validators.rs src/codec.rs src/codec/utils.rs tests/*.rs |
Changes to Cargo.toml.
1 2 | [package] name = "blather" | | | < | > | | < | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
[package]
name = "blather"
version = "0.10.1"
edition = "2021"
license = "0BSD"
keywords = [ "line-based", "protocol", "tokio", "codec" ]
repository = "https://repos.qrnch.tech/pub/blather"
description = "A talkative line-based protocol"
exclude = [
".fossil-settings",
".efiles",
".fslckout",
"rustfmt.toml",
"www"
]
[dependencies]
bytes = { version = "1.7.1" }
futures = { version = "0.3.30" }
tokio = { version = "1.39.2" }
tokio-stream = { version = "0.1.15" }
tokio-util = { version= "0.7.11", features = ["codec"] }
[dev-dependencies]
tokio = { version = "1.39.2", features = ["macros", "net"] }
tokio-test = { version = "0.4.4" }
[package.metadata.docs.rs]
rustdoc-args = ["--generate-link-to-definition"]
# vim: set ft=toml et sw=2 ts=2 sts=2 cinoptions=2 tw=79 :
|
Changes to README.md.
1 2 | # blather | | | 1 2 3 4 5 | # blather A talkative, somwhat reminiscent of HTTP, line-based protocol, implemented as a tokio-util Codec. |
Changes to src/codec.rs.
1 2 3 4 5 6 7 8 9 |
//! A [`tokio_util::codec`] Codec that is used to encode and decode the
//! blather protocol.
use std::{
fmt,
{cmp, collections::HashMap, mem}
};
use bytes::{BufMut, Bytes, BytesMut};
| > > | 1 2 3 4 5 6 7 8 9 10 11 |
//! A [`tokio_util::codec`] Codec that is used to encode and decode the
//! blather protocol.
pub mod utils;
use std::{
fmt,
{cmp, collections::HashMap, mem}
};
use bytes::{BufMut, Bytes, BytesMut};
|
| ︙ | ︙ |
Added src/codec/utils.rs.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
//! Helpers used to perform common framed stream operation.
use tokio::io::AsyncRead;
use tokio_util::codec::Framed;
use tokio_stream::StreamExt;
use crate::{
codec::{self, Codec},
err::Error,
Telegram
};
/// Validation callback result.
pub enum Outcome {
/// The Telegram should be returned to the application.
Accept,
/// The Telefgram should be ignored.
Ignore,
/// Tell the caller that a fatal error occurred.
Fail(Error)
}
/// Receive a [`Telegram`] from a `Frame`'d stream.
///
/// The callback in `validate` can be used to inspect the received `Telegram`
/// and choose whether to return/ignore it or return a fatal error.
///
/// If the connection is closed this function will return `Ok(None)`.
pub async fn expect_telegram<T, F>(
frmio: &mut Framed<T, Codec>,
validate: F
) -> Result<Option<Telegram>, Error>
where
T: AsyncRead + Unpin,
F: Fn(&Telegram) -> Outcome
{
loop {
let Some(frm) = frmio.next().await else {
// Got None, which (probably) means the connection has ended.
break Ok(None);
};
let frm = match frm {
Ok(frm) => frm,
Err(e) => {
break Err(Error::Protocol(e.to_string()));
}
};
let codec::Input::Telegram(tg) = frm else {
// If a non-Telegram is received, then abort and close connection
break Err(Error::Protocol(
"Did not receive an expected Telegram".into()
));
};
match validate(&tg) {
Outcome::Accept => break Ok(Some(tg)),
Outcome::Ignore => continue,
Outcome::Fail(e) => break Err(e)
}
}
}
// vim: set ft=rust et sw=2 ts=2 sts=2 cinoptions=2 tw=79 :
|
Changes to src/types/telegram.rs.
| ︙ | ︙ | |||
482 483 484 485 486 487 488 489 490 491 492 493 494 495 |
fn from(params: Params) -> Self {
Telegram {
params,
..Default::default()
}
}
}
impl From<HashMap<String, String>> for Telegram {
fn from(hm: HashMap<String, String>) -> Self {
Telegram {
params: Params::from(hm),
..Default::default()
}
| > > > > > > > > > > | 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 |
fn from(params: Params) -> Self {
Telegram {
params,
..Default::default()
}
}
}
impl TryFrom<(&str, Params)> for Telegram {
type Error = Error;
fn try_from(t: (&str, Params)) -> Result<Self, Self::Error> {
let mut tg = Telegram::new_topic(t.0)?;
tg.params = t.1;
Ok(tg)
}
}
impl From<HashMap<String, String>> for Telegram {
fn from(hm: HashMap<String, String>) -> Self {
Telegram {
params: Params::from(hm),
..Default::default()
}
|
| ︙ | ︙ |
Changes to tests/telegram.rs.
|
| | > | 1 2 3 4 5 6 7 8 9 |
use blather::{Error, Params, Telegram};
#[test]
fn simple() {
let mut msg = Telegram::new();
msg.set_topic("SomeTopic").unwrap();
assert_eq!(msg.get_topic().unwrap(), "SomeTopic");
|
| ︙ | ︙ | |||
112 113 114 115 116 117 118 119 120 |
let mut tg = Telegram::new();
assert_eq!(
tg.set_topic("Some Topic"),
Err(Error::BadFormat("Invalid topic character".to_string()))
);
}
// vim: set ft=rust et sw=2 ts=2 sts=2 cinoptions=2 tw=79 :
| > > > > > > > > > | 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
let mut tg = Telegram::new();
assert_eq!(
tg.set_topic("Some Topic"),
Err(Error::BadFormat("Invalid topic character".to_string()))
);
}
#[test]
fn create_from_tuple() {
let mut params = Params::new();
params.add_str("my", "word").unwrap();
let tg = Telegram::try_from(("Hello", params)).unwrap();
assert_eq!(tg.get_str("my"), Some("word"));
}
// vim: set ft=rust et sw=2 ts=2 sts=2 cinoptions=2 tw=79 :
|
Changes to www/changelog.md.
1 2 3 4 5 6 | # Change Log ⚠️ indicates a breaking change. ## [Unreleased] | | > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | # Change Log ⚠️ indicates a breaking change. ## [Unreleased] [Details](/vdiff?from=blather-0.10.1&to=trunk) ### Added ### Changed ### Removed --- ## [0.10.1] - 2024-08-06 [Details](/vdiff?from=blather-0.10.0&to=blather-0.10.1) ### Added - Module `codec::utils` added for collecting `Frame`'d stream helpers. - `codec::utils::expect_telegram()` can be used to receive `Telegram`s with simple validation. - Add `TryFrom<(&str, Params)>` implementation for `Telegram`. --- ## [0.10.0] - 2024-02-23 [Details](/vdiff?from=blather-0.9.0&to=blather-0.10.0) ### Changed |
| ︙ | ︙ |
Changes to www/index.md.
1 2 | # blather | | | 1 2 3 4 5 6 7 8 9 10 | # blather A talkative, somwhat reminiscent of HTTP, line-based protocol, implemented as a tokio-util Codec. ## Change log The details of changes can always be found in the timeline, but for a high-level view of changes between released versions there's a manually |
| ︙ | ︙ |