• v0.14.0 e509e067dd

    version 0.14.0
    All checks were successful
    Rust / build (push) Successful in 1m54s
    Stable

    vinzenz released this 2025-05-03 11:48:56 +02:00 | 4 commits to main since this release

    This is a big breaking change for the library.

    • BREAKING: To support commands implemented outside the library, the Command enum has been renamed to TypedCommand.
    • BREAKING: Connections have been removed. While this sounds like a huge change, the connections were thin wrappers around the underlying transports.
    • BREAKING: The commands have been renamed to better reflect their usage.
    • BREAKING: Nearly all calls to panic!, .unwrap() and .expect() have been removed and signatures changed to reflect that. Apart from out-of-bounds accesses on the containers, the library will not crash your app anymore.
    • BREAKING: The BitVec type alias has been renamed to DisplayBitVec because of an issue in cbindgen that affected servicepoint_binding_c.
    • FEATURE: Add UdpSocketExt to easily use a UdpSocket in a way similar to the old connections.
    • FEATURE: Command is now a new trait that gets auto-implemented if the required supertraits are.
    • FEATURE: Each command is now a struct with public fields. This means a command can be mutated and functions can declare specific types in their signatures.
    • FEATURE: Containers like CharGrid and Bitmap have gotten new TryInto implementations for their command struct. That means to send a bitmap to the top left of the screen with default compression, you can write BitmapCommand::from(bitmap).
    • FEATURE: Some structs and enum values have been annotated with a repr attribute to make them usable in language bindings.

    Migration Guide

    • Some functions now return None or Err when called improperly. To keep the old behavior, add an .expect() or .unwrap().
    • Replace usages of servicepoint::BitVec with servicepoint::DisplayBitVec.

    Connection

    • Connection::Fake can be replaced by FakeConnection - though the usefulness of that decreased.
    • Connection::Websocket does not have an equivalent anymore. You should use tungstenite directly by first turning the command into a packet and then the packet into a Vec<u8>.
    • Instead of Connection::open use UdpSocket::bind_connect after adding UdpSocketExt to the imports.
    • Instead of calling socket.send(command), use socket.send_command(command).

    Command names

    v0.13 v0.14
    Command::Clear ClearCommand
    Command::Utf8Data CharGridCommand
    Command::Brightness GlobalBrightnessCommand
    Command::BitmapLinearWin BitmapCommand
    Command::Cp437Data Cp437GridCommand
    Command::CharBrightness BrightnessGridCommand
    Command::HardReset HardResetCommand
    Command::FadeOut FadeOutCommand
    Command::BitmapLegacy BitmapLegacyCommand
    Command::BitmapLinear BitVecCommand { operation: Overwrite }
    Command::BitmapLinearAnd BitVecCommand { operation: And }
    Command::BitmapLinearOr BitVecCommand { operation: Or }
    Command::BitmapLinearXor BitVecCommand { operation: Xor }

    Known issues

    • The examples use UdpSocket::bind instead of bind_connect, which makes them crash at runtime because the system call fails. This is fixed in v0.14.1
    Downloads