threadsafe_zmq 2.0.0

Thread-safe ZeroMQ wrapper with sync and async support
Documentation
{
  description = "Thread-safe ZeroMQ wrapper for Rust";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    flake-utils.url = "github:numtide/flake-utils";
    rust-overlay = {
      url = "github:oxalica/rust-overlay";
      inputs.nixpkgs.follows = "nixpkgs";
    };
  };

  outputs = { self, nixpkgs, flake-utils, rust-overlay }:
    flake-utils.lib.eachDefaultSystem (system:
      let
        overlays = [ (import rust-overlay) ];
        pkgs = import nixpkgs {
          inherit system overlays;
        };

        # Use stable Rust with the rust-src component for IDE support
        rustToolchain = pkgs.rust-bin.stable.latest.default.override {
          extensions = [ "rust-src" "rust-analyzer" "clippy" "rustfmt" ];
        };

        # System dependencies required for ZeroMQ
        # zeromq requires libsodium for encryption and pkg-config for discovery
        buildInputs = with pkgs; [
          zeromq
          pkg-config
        ];

        # Additional development tools
        devTools = with pkgs; [
          just
          cargo-watch
          cargo-edit
          cargo-outdated
        ];

      in {
        devShells.default = pkgs.mkShell {
          buildInputs = buildInputs ++ devTools ++ [ rustToolchain ];

          # pkg-config needs to find zeromq
          PKG_CONFIG_PATH = "${pkgs.zeromq}/lib/pkgconfig";

          # Some systems need explicit library path for dynamic linking
          LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath [ pkgs.zeromq ];

          # macOS-specific: set DYLD_LIBRARY_PATH
          DYLD_LIBRARY_PATH = pkgs.lib.makeLibraryPath [ pkgs.zeromq ];

          shellHook = ''
            echo "threadsafe_zmq development environment"
            echo ""
            echo "Available commands:"
            echo "  just         - Show all available tasks"
            echo "  just build   - Build the library"
            echo "  just test    - Run tests"
            echo "  just example - Run the example (server + client)"
            echo ""
            echo "ZeroMQ version: $(pkg-config --modversion libzmq 2>/dev/null || echo 'not found')"
            echo "Rust version: $(rustc --version)"
          '';
        };

        # Allow running tests via `nix build`
        packages.default = pkgs.rustPlatform.buildRustPackage {
          pname = "threadsafe_zmq";
          version = "2.0.0";
          src = ./.;
          cargoLock.lockFile = ./Cargo.lock;
          nativeBuildInputs = [ pkgs.pkg-config ];
          buildInputs = [ pkgs.zeromq ];
        };
      }
    );
}