{
  lib,
  stdenv,
  buildPythonPackage,
  fetchPypi,
  rustPlatform,
  cargo,
  rustc,
  libiconv,
  pytestCheckHook,
}:

buildPythonPackage rec {
  pname = "y-py";
  version = "0.6.2";
  format = "pyproject";

  src = fetchPypi {
    pname = "y_py";
    inherit version;
    hash = "sha256-R1eoKlBAags6MzqgEiAZozG9bxbkn+1n3KQj+Siz/U0=";
  };

  cargoDeps = rustPlatform.fetchCargoTarball {
    inherit src;
    name = "${pname}-${version}";
    hash = "sha256-RXwrDSPU0wiprsUJwoDzti14H/+bSwy4hK4tYhNVfYw=";
  };

  nativeBuildInputs = [
    rustPlatform.cargoSetupHook
    rustPlatform.maturinBuildHook
    cargo
    rustc
  ];

  buildInputs = lib.optional stdenv.isDarwin libiconv;

  pythonImportsCheck = [ "y_py" ];

  nativeCheckInputs = [ pytestCheckHook ];

  meta = {
    description = "Python bindings for Y-CRDT";
    homepage = "https://github.com/y-crdt/ypy";
    license = lib.licenses.mit;
    maintainers = with lib.maintainers; [ dotlambda ];
  };
}
