├── tests ├── __init__.py ├── test_client.py └── conftest.py ├── python_examples ├── example_screenshot.png ├── README.md ├── consumer.py └── producer.py ├── src ├── bin │ └── stub_gen.rs ├── lib.rs ├── topic.rs ├── stream.rs ├── send_message.rs ├── receive_message.rs └── client.rs ├── .devcontainer ├── Dockerfile ├── devcontainer.json └── docker-compose.yml ├── NOTICE ├── pyproject.toml ├── Cargo.toml ├── .gitignore ├── CONTRIBUTING.md ├── README.md ├── .github └── workflows │ └── python.yml ├── iggy_py.pyi ├── LICENSE └── Cargo.lock /tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /python_examples/example_screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iggy-rs/iggy-python-client/HEAD/python_examples/example_screenshot.png -------------------------------------------------------------------------------- /src/bin/stub_gen.rs: -------------------------------------------------------------------------------- 1 | use pyo3_stub_gen::Result; 2 | 3 | fn main() -> Result<()> { 4 | // `stub_info` is a function defined by `define_stub_info_gatherer!` macro. 5 | let stub = iggy_py::client::stub_info()?; 6 | stub.generate()?; 7 | Ok(()) 8 | } 9 | -------------------------------------------------------------------------------- /.devcontainer/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mcr.microsoft.com/devcontainers/python:1-3.12-bullseye 2 | 3 | ENV VIRTUAL_ENV=/opt/venv 4 | RUN python -m venv $VIRTUAL_ENV 5 | ENV PATH="$VIRTUAL_ENV/bin:$PATH" 6 | RUN sudo chown -R vscode:vscode $VIRTUAL_ENV 7 | 8 | RUN pip install loguru maturin[patchelf] 9 | -------------------------------------------------------------------------------- /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Iggy Python SDK devcontainer", 3 | "dockerComposeFile": "docker-compose.yml", 4 | "service": "devcontainer", 5 | "features": { 6 | "ghcr.io/devcontainers/features/rust:1": {} 7 | }, 8 | "workspaceFolder": "/workspace" 9 | } 10 | -------------------------------------------------------------------------------- /.devcontainer/docker-compose.yml: -------------------------------------------------------------------------------- 1 | services: 2 | devcontainer: 3 | build: 4 | context: . 5 | dockerfile: Dockerfile 6 | volumes: 7 | - ..:/workspace:cached 8 | network_mode: service:iggy 9 | command: sleep infinity 10 | 11 | iggy: 12 | image: iggyrs/iggy:latest 13 | restart: unless-stopped 14 | -------------------------------------------------------------------------------- /python_examples/README.md: -------------------------------------------------------------------------------- 1 | ## Python Examples 2 | 3 | ### 1. Start the Producer: 4 | 5 | Navigate to the `python_examples` directory and run: 6 | 7 | ``` 8 | python producer.py 9 | ``` 10 | 11 | ### 2. Start the Consumer: 12 | 13 | Still in the `python_examples` directory, run the consumer using a separate terminal: 14 | 15 | ``` 16 | python consumer.py 17 | ``` 18 | 19 | Here's how the output should look (show images of the output): 20 | ![Output Sample](example_screenshot.png) -------------------------------------------------------------------------------- /NOTICE: -------------------------------------------------------------------------------- 1 | Copyright 2023-2025 Piotr Gankiewicz, LaserData, Inc. 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software 10 | distributed under the License is distributed on an "AS IS" BASIS, 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | See the License for the specific language governing permissions and 13 | limitations under the License. 14 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | pub mod client; 2 | mod receive_message; 3 | mod send_message; 4 | mod stream; 5 | mod topic; 6 | 7 | use client::IggyClient; 8 | use pyo3::prelude::*; 9 | use receive_message::{MessageState, PollingStrategy, ReceiveMessage}; 10 | use send_message::SendMessage; 11 | use stream::StreamDetails; 12 | use topic::TopicDetails; 13 | 14 | /// A Python module implemented in Rust. 15 | #[pymodule] 16 | fn iggy_py(_py: Python, m: &Bound<'_, PyModule>) -> PyResult<()> { 17 | m.add_class::()?; 18 | m.add_class::()?; 19 | m.add_class::()?; 20 | m.add_class::()?; 21 | m.add_class::()?; 22 | m.add_class::()?; 23 | m.add_class::()?; 24 | Ok(()) 25 | } 26 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["maturin>=1.2,<2.0"] 3 | build-backend = "maturin" 4 | 5 | [project] 6 | name = "iggy_py" 7 | requires-python = ">=3.7" 8 | version = "0.4.0" 9 | classifiers = [ 10 | "Programming Language :: Rust", 11 | "Programming Language :: Python :: Implementation :: CPython", 12 | "Programming Language :: Python :: Implementation :: PyPy", 13 | ] 14 | description= "Apache Iggy is the persistent message streaming platform written in Rust, supporting QUIC, TCP and HTTP transport protocols, capable of processing millions of messages per second." 15 | 16 | [tool.maturin] 17 | features = ["pyo3/extension-module"] 18 | 19 | [project.optional-dependencies] 20 | testing = [ 21 | "pytest", 22 | "pytest-asyncio", 23 | "testcontainers[docker]", 24 | "maturin" 25 | ] 26 | 27 | [tool.pytest.ini_options] 28 | asyncio_mode = "auto" 29 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "iggy-py" 3 | version = "0.4.0" 4 | edition = "2021" 5 | authors = ["Dario Lencina Talarico "] 6 | license = "Apache-2.0" 7 | description = "Apache Iggy is the persistent message streaming platform written in Rust, supporting QUIC, TCP and HTTP transport protocols, capable of processing millions of messages per second." 8 | documentation = "https://docs.iggy.rs" 9 | repository = "https://github.com/iggy-rs/iggy" 10 | 11 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 12 | [lib] 13 | name = "iggy_py" 14 | crate-type = ["cdylib", "rlib"] 15 | 16 | [dependencies] 17 | pyo3 = "0.22.0" 18 | iggy = "0.6.201" 19 | pyo3-async-runtimes = { version = "0.22.0", features = ["attributes", "tokio-runtime"] } 20 | pyo3-stub-gen = "0.7.0" 21 | 22 | [[bin]] 23 | name = "stub_gen" 24 | doc = false 25 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | 3 | # Byte-compiled / optimized / DLL files 4 | __pycache__/ 5 | .pytest_cache/ 6 | *.py[cod] 7 | 8 | # C extensions 9 | *.so 10 | 11 | # Distribution / packaging 12 | .Python 13 | .venv/ 14 | env/ 15 | build/ 16 | develop-eggs/ 17 | dist/ 18 | eggs/ 19 | lib/ 20 | lib64/ 21 | parts/ 22 | sdist/ 23 | var/ 24 | include/ 25 | man/ 26 | venv/ 27 | *.egg-info/ 28 | .installed.cfg 29 | *.egg 30 | 31 | # Installer logs 32 | pip-log.txt 33 | pip-delete-this-directory.txt 34 | pip-selfcheck.json 35 | 36 | # Unit test / coverage reports 37 | htmlcov/ 38 | .tox/ 39 | .coverage 40 | .cache 41 | nosetests.xml 42 | coverage.xml 43 | 44 | # Translations 45 | *.mo 46 | 47 | # Mr Developer 48 | .mr.developer.cfg 49 | .project 50 | .pydevproject 51 | 52 | # Rope 53 | .ropeproject 54 | 55 | # Django stuff: 56 | *.log 57 | *.pot 58 | 59 | .DS_Store 60 | 61 | # Sphinx documentation 62 | docs/_build/ 63 | 64 | # PyCharm 65 | .idea/ 66 | 67 | # VSCode 68 | .vscode/ 69 | 70 | # Pyenv 71 | .python-version -------------------------------------------------------------------------------- /src/topic.rs: -------------------------------------------------------------------------------- 1 | use iggy::models::topic::TopicDetails as RustTopicDetails; 2 | use pyo3::prelude::*; 3 | use pyo3_stub_gen::derive::{gen_stub_pyclass, gen_stub_pymethods}; 4 | 5 | #[gen_stub_pyclass] 6 | #[pyclass] 7 | pub struct TopicDetails { 8 | pub(crate) inner: RustTopicDetails, 9 | } 10 | 11 | impl From for TopicDetails { 12 | fn from(topic_details: RustTopicDetails) -> Self { 13 | Self { 14 | inner: topic_details, 15 | } 16 | } 17 | } 18 | 19 | #[gen_stub_pymethods] 20 | #[pymethods] 21 | impl TopicDetails { 22 | #[getter] 23 | pub fn id(&self) -> u32 { 24 | self.inner.id 25 | } 26 | 27 | #[getter] 28 | pub fn name(&self) -> String { 29 | self.inner.name.to_string() 30 | } 31 | 32 | #[getter] 33 | pub fn messages_count(&self) -> u64 { 34 | self.inner.messages_count 35 | } 36 | 37 | #[getter] 38 | pub fn topics_count(&self) -> u32 { 39 | self.inner.partitions_count 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/stream.rs: -------------------------------------------------------------------------------- 1 | use iggy::models::stream::StreamDetails as RustStreamDetails; 2 | use pyo3::prelude::*; 3 | use pyo3_stub_gen::derive::{gen_stub_pyclass, gen_stub_pymethods}; 4 | 5 | #[pyclass] 6 | #[gen_stub_pyclass] 7 | pub struct StreamDetails { 8 | pub(crate) inner: RustStreamDetails, 9 | } 10 | 11 | impl From for StreamDetails { 12 | fn from(stream_details: RustStreamDetails) -> Self { 13 | Self { 14 | inner: stream_details, 15 | } 16 | } 17 | } 18 | 19 | #[gen_stub_pymethods] 20 | #[pymethods] 21 | impl StreamDetails { 22 | #[getter] 23 | pub fn id(&self) -> u32 { 24 | self.inner.id 25 | } 26 | 27 | #[getter] 28 | pub fn name(&self) -> String { 29 | self.inner.name.to_string() 30 | } 31 | 32 | #[getter] 33 | pub fn messages_count(&self) -> u64 { 34 | self.inner.messages_count 35 | } 36 | 37 | #[getter] 38 | pub fn topics_count(&self) -> u32 { 39 | self.inner.topics_count 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to Apache Iggy 2 | 3 | This repository provides a Python library powered by Rust using `pyo3`. It also utilizes Docker for server deployment. 4 | 5 | ## Quick Start 6 | 7 | ### 1. Run the Server with Docker: 8 | 9 | Ensure you have Docker installed on your system. Then, execute the following command: 10 | 11 | ``` 12 | docker run --rm -p 8080:8080 -p 3000:3000 -p 8090:8090 iggyrs/iggy:0.4.21 13 | ``` 14 | 15 | 16 | This command runs the server and maps the specified ports to your local machine. 17 | 18 | ### 2. Install loguru: 19 | Loguru is advanced library used for logging information about procceses. Install it with: 20 | 21 | ``` 22 | pip install loguru 23 | ``` 24 | 25 | ### 3. Install Maturin: 26 | 27 | Maturin is used for building Rust binaries for Python. Install it with: 28 | 29 | ``` 30 | pip install maturin 31 | ``` 32 | 33 | ### 4. Build and Install the pyo3 Library: 34 | 35 | Navigate to your library's root directory and execute: 36 | 37 | ``` 38 | python -m venv .venv && source .venv/bin/activate 39 | maturin develop 40 | ``` 41 | 42 | 43 | This will build the Rust library and make it available for Python. 44 | 45 | ### 5. Running the Examples: 46 | 47 | Go to [python_examples/README.md](python_examples/README.md) for instructions on running the examples. 48 | 49 | -------------------------------------------------------------------------------- /tests/test_client.py: -------------------------------------------------------------------------------- 1 | from iggy_py import PollingStrategy 2 | from iggy_py import SendMessage as Message 3 | from iggy_py import IggyClient 4 | 5 | STREAM_NAME = "test-stream" 6 | TOPIC_NAME = "test-topic" 7 | PARTITION_ID = 1 8 | 9 | 10 | async def test_send_and_poll_messages(iggy_client: IggyClient): 11 | assert iggy_client is not None 12 | 13 | await iggy_client.create_stream(STREAM_NAME) 14 | stream = await iggy_client.get_stream(STREAM_NAME) 15 | assert stream is not None 16 | assert stream.name == STREAM_NAME 17 | 18 | await iggy_client.create_topic(STREAM_NAME, TOPIC_NAME, partitions_count=1) 19 | topic = await iggy_client.get_topic(STREAM_NAME, TOPIC_NAME) 20 | assert topic is not None 21 | assert topic.name == TOPIC_NAME 22 | 23 | messages = [ 24 | Message("Message 1"), 25 | Message("Message 2"), 26 | ] 27 | await iggy_client.send_messages(STREAM_NAME, TOPIC_NAME, PARTITION_ID, messages) 28 | 29 | polled_messages = await iggy_client.poll_messages( 30 | STREAM_NAME, 31 | TOPIC_NAME, 32 | PARTITION_ID, 33 | PollingStrategy.Next(), 34 | count=10, 35 | auto_commit=True, 36 | ) 37 | 38 | assert len(polled_messages) >= 2 39 | assert polled_messages[0].payload().decode("utf-8") == "Message 1" 40 | assert polled_messages[1].payload().decode("utf-8") == "Message 2" 41 | -------------------------------------------------------------------------------- /src/send_message.rs: -------------------------------------------------------------------------------- 1 | use iggy::messages::send_messages::Message as RustSendMessage; 2 | use pyo3::prelude::*; 3 | use pyo3_stub_gen::derive::{gen_stub_pyclass, gen_stub_pymethods}; 4 | use std::str::FromStr; 5 | 6 | /// A Python class representing a message to be sent. 7 | /// 8 | /// This class wraps a Rust message meant for sending, facilitating 9 | /// the creation of such messages from Python and their subsequent use in Rust. 10 | #[pyclass] 11 | #[gen_stub_pyclass] 12 | pub struct SendMessage { 13 | pub(crate) inner: RustSendMessage, 14 | } 15 | 16 | /// Provides the capability to clone a SendMessage. 17 | /// 18 | /// This implementation creates a new `RustSendMessage` instance from 19 | /// the string representation of the original `RustSendMessage`. 20 | impl Clone for SendMessage { 21 | fn clone(&self) -> Self { 22 | Self { 23 | inner: self.inner.clone(), 24 | } 25 | } 26 | } 27 | 28 | #[gen_stub_pymethods] 29 | #[pymethods] 30 | impl SendMessage { 31 | /// Constructs a new `SendMessage` instance from a string. 32 | /// 33 | /// This method allows for the creation of a `SendMessage` instance 34 | /// directly from Python using the provided string data. 35 | #[new] 36 | pub fn new(data: String) -> Self { 37 | // TODO: handle errors 38 | let inner = RustSendMessage::from_str(&data).unwrap(); 39 | Self { inner } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # The source code has been moved to [Apache Iggy](https://github.com/apache/iggy/) 2 | 3 | ## Apache Iggy Python SDK 4 | 5 | [![discord-badge](https://img.shields.io/discord/1144142576266530928)](https://iggy.rs/discord) 6 | 7 | Apache Iggy is the persistent message streaming platform written in Rust, supporting QUIC, TCP and HTTP transport protocols, capable of processing millions of messages per second. 8 | 9 | 10 | ## Installation 11 | 12 | To install `iggy`, use pip: 13 | 14 | ```bash 15 | pip install iggy-py 16 | ``` 17 | 18 | ### Supported Python Versions 19 | 20 | - Python 3.7+ 21 | 22 | ## Usage and Examples: 23 | 24 | All examples rely on a running iggy server. To start the server, execute: 25 | 26 | ``` 27 | docker run --rm -p 8080:8080 -p 3000:3000 -p 8090:8090 iggyrs/iggy:0.4.21 28 | ``` 29 | 30 | ## Generating Stub Files 31 | To generate a stub file, execute the following command: 32 | 33 | ``` 34 | cargo run --bin stub_gen 35 | ``` 36 | 37 | Refer to the python_examples directory for examples on how to use the iggy library. 38 | 39 | ## Running the Examples: 40 | 41 | Go to [python_examples/README.md](python_examples/README.md) for instructions on running the examples. 42 | 43 | 44 | ## API Reference 45 | 46 | For detailed documentation, visit [Apache Iggy's official Docs](https://docs.iggy.rs/). 47 | 48 | ## Contributing 49 | 50 | Contributions are welcome! Please: 51 | 52 | 1. Fork the repository on GitHub. 53 | 2. Create an issue for any bugs or features you'd like to address. 54 | 3. Submit pull requests following our code style guidelines. 55 | 56 | For more details, see the [Developer README](CONTRIBUTING.md). 57 | 58 | ## License 59 | 60 | Apache iggy is distributed under the Apache 2.0 License. See [LICENSE](LICENSE) for terms and conditions. 61 | 62 | ## Contact Information 63 | 64 | For questions, suggestions, or issues, contact the developers at [your email address] or raise an issue on GitHub. 65 | -------------------------------------------------------------------------------- /python_examples/consumer.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | from loguru import logger 3 | 4 | # Assuming there's a Python module for iggy with similar functionalities. 5 | from iggy_py import IggyClient, ReceiveMessage, PollingStrategy 6 | 7 | STREAM_NAME = "sample-stream" 8 | TOPIC_NAME = "sample-topic" 9 | PARTITION_ID = 1 10 | 11 | 12 | async def main(): 13 | client = IggyClient() # Assuming default constructor has similar functionality. 14 | try: 15 | logger.info("Connecting to IggyClient...") 16 | await client.connect() 17 | logger.info("Connected. Logging in user...") 18 | await client.login_user("iggy", "iggy") 19 | logger.info("Logged in.") 20 | await consume_messages(client) 21 | except Exception as error: 22 | logger.exception("Exception occurred in main function: {}", error) 23 | 24 | 25 | async def consume_messages(client: IggyClient): 26 | interval = 0.5 # 500 milliseconds in seconds for asyncio.sleep 27 | logger.info( 28 | f"Messages will be consumed from stream: {STREAM_NAME}, topic: {TOPIC_NAME}, partition: {PARTITION_ID} with " 29 | f"interval {interval * 1000} ms.") 30 | offset = 0 31 | messages_per_batch = 10 32 | while True: 33 | try: 34 | logger.debug("Polling for messages...") 35 | polled_messages = await client.poll_messages( 36 | stream=STREAM_NAME, 37 | topic=TOPIC_NAME, 38 | partition_id=PARTITION_ID, 39 | polling_strategy=PollingStrategy.Next(), 40 | count=messages_per_batch, 41 | auto_commit=True 42 | ) 43 | if not polled_messages: 44 | logger.warning("No messages found in current poll") 45 | await asyncio.sleep(interval) 46 | continue 47 | 48 | offset += len(polled_messages) 49 | for message in polled_messages: 50 | handle_message(message) 51 | await asyncio.sleep(interval) 52 | except Exception as error: 53 | logger.exception("Exception occurred while consuming messages: {}", error) 54 | break 55 | 56 | 57 | def handle_message(message: ReceiveMessage): 58 | payload = message.payload().decode('utf-8') 59 | logger.info(f"Handling message at offset: {message.offset()} with payload: {payload}...") 60 | 61 | 62 | if __name__ == "__main__": 63 | asyncio.run(main()) 64 | -------------------------------------------------------------------------------- /tests/conftest.py: -------------------------------------------------------------------------------- 1 | import socket 2 | import pytest 3 | import time 4 | from typing import Generator 5 | from testcontainers.core.container import DockerContainer 6 | 7 | from iggy_py import IggyClient 8 | 9 | 10 | @pytest.fixture(scope="session") 11 | def iggy_container() -> Generator[DockerContainer, None, None]: 12 | """ 13 | Creates and starts an Iggy server container using Docker. 14 | """ 15 | container = DockerContainer("iggyrs/iggy:0.4.21").with_exposed_ports( 16 | 8080, 3000, 8090 17 | ) 18 | container.start() 19 | 20 | yield container 21 | 22 | container.stop() 23 | 24 | 25 | @pytest.fixture(scope="session") 26 | async def iggy_client(iggy_container: DockerContainer) -> IggyClient: 27 | """ 28 | Initializes and returns an Iggy client connected to the running Iggy server container. 29 | 30 | This fixture ensures that the client is authenticated and ready for use in tests. 31 | 32 | :param iggy_container: The running Iggy container fixture. 33 | :return: An instance of IggyClient connected to the server. 34 | """ 35 | host = iggy_container.get_container_host_ip() 36 | port = iggy_container.get_exposed_port(8090) 37 | wait_for_container(port, host, timeout=30, interval=5) 38 | 39 | client = IggyClient(f"{host}:{port}") 40 | 41 | await client.connect() 42 | 43 | await wait_for_ping(client, timeout=30, interval=5) 44 | 45 | await client.login_user("iggy", "iggy") 46 | return client 47 | 48 | 49 | def wait_for_container(port: int, host: str, timeout: int, interval: int) -> None: 50 | """ 51 | Waits for a container to become alive by polling a specified port. 52 | 53 | :param port: The port number to poll. 54 | :param host: The hostname or IP address of the container (default is 'localhost'). 55 | :param timeout: The maximum time in seconds to wait for the container to become available (default is 30). 56 | :param interval: The time in seconds between each polling attempt (default is 2). 57 | """ 58 | start_time = time.time() 59 | 60 | while True: 61 | try: 62 | with socket.create_connection((host, port), timeout=interval): 63 | return 64 | except (socket.timeout, ConnectionRefusedError): 65 | elapsed_time = time.time() - start_time 66 | if elapsed_time >= timeout: 67 | raise TimeoutError( 68 | f"Timed out after {timeout} seconds waiting for container to become available at {host}:{port}" 69 | ) 70 | 71 | time.sleep(interval) 72 | 73 | 74 | async def wait_for_ping( 75 | client: IggyClient, timeout: int = 30, interval: int = 5 76 | ) -> None: 77 | """ 78 | Waits for the Iggy server to respond to ping requests before proceeding. 79 | 80 | :param client: The Iggy client instance. 81 | :param timeout: The maximum time in seconds to wait for the server to respond. 82 | :param interval: The time in seconds between each ping attempt. 83 | :raises TimeoutError: If the server does not respond within the timeout period. 84 | """ 85 | start_time = time.time() 86 | 87 | while True: 88 | try: 89 | await client.ping() 90 | return 91 | except Exception: 92 | elapsed_time = time.time() - start_time 93 | if elapsed_time >= timeout: 94 | raise TimeoutError( 95 | f"Timed out after {timeout} seconds waiting for Iggy server to respond to ping." 96 | ) 97 | 98 | time.sleep(interval) 99 | -------------------------------------------------------------------------------- /python_examples/producer.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | from loguru import logger 3 | 4 | # Assuming we have a Python module for iggy with similar functionality as the Rust one. 5 | from iggy_py import IggyClient, SendMessage as Message, StreamDetails, TopicDetails 6 | 7 | STREAM_NAME = "sample-stream" 8 | TOPIC_NAME = "sample-topic" 9 | PARTITION_ID = 1 10 | 11 | 12 | async def main(): 13 | client = IggyClient() # Assuming default constructor has similar functionality. 14 | logger.info("Connecting to IggyClient") 15 | await client.connect() 16 | logger.info("Connected. Logging in user...") 17 | await client.login_user("iggy", "iggy") 18 | logger.info("Logged in.") 19 | await init_system(client) 20 | await produce_messages(client) 21 | 22 | 23 | async def init_system(client: IggyClient): 24 | try: 25 | logger.info(f"Creating stream with name {STREAM_NAME}...") 26 | stream: StreamDetails = await client.get_stream(STREAM_NAME) 27 | if stream is None: 28 | await client.create_stream(name=STREAM_NAME) 29 | logger.info("Stream was created successfully.") 30 | else: 31 | logger.info(f"Stream {stream.name} already exists with ID {stream.id}") 32 | 33 | except Exception as error: 34 | logger.error(f"Error creating stream: {error}") 35 | logger.exception(error) 36 | 37 | try: 38 | logger.info(f"Creating topic {TOPIC_NAME} in stream {STREAM_NAME}") 39 | topic: TopicDetails = await client.get_topic(STREAM_NAME, TOPIC_NAME) 40 | if topic is None: 41 | await client.create_topic( 42 | stream=STREAM_NAME, # Assuming a method exists to create a numeric Identifier. 43 | partitions_count=1, 44 | name=TOPIC_NAME, 45 | replication_factor=1 46 | ) 47 | logger.info(f"Topic was created successfully.") 48 | else: 49 | logger.info(f"Topic {topic.name} already exists with ID {topic.id}") 50 | except Exception as error: 51 | logger.error(f"Error creating topic {error}") 52 | logger.exception(error) 53 | 54 | 55 | async def produce_messages(client: IggyClient): 56 | interval = 0.5 # 500 milliseconds in seconds for asyncio.sleep 57 | logger.info( 58 | f"Messages will be sent to stream: {STREAM_NAME}, topic: {TOPIC_NAME}, partition: {PARTITION_ID} with interval {interval * 1000} ms.") 59 | current_id = 0 60 | messages_per_batch = 10 61 | while True: 62 | messages = [] 63 | for _ in range(messages_per_batch): 64 | current_id += 1 65 | payload = f"message-{current_id}" 66 | message = Message(payload) # Assuming a method exists to convert str to Message. 67 | messages.append(message) 68 | logger.info( 69 | f"Attempting to send batch of {messages_per_batch} messages. Batch ID: {current_id // messages_per_batch}") 70 | try: 71 | await client.send_messages( 72 | stream=STREAM_NAME, 73 | topic=TOPIC_NAME, 74 | partitioning=PARTITION_ID, 75 | messages=messages, 76 | ) 77 | logger.info( 78 | f"Successfully sent batch of {messages_per_batch} messages. Batch ID: {current_id // messages_per_batch}") 79 | except Exception as error: 80 | logger.error(f"Exception type: {type(error).__name__}, message: {error}") 81 | logger.exception(error) 82 | 83 | await asyncio.sleep(interval) 84 | 85 | 86 | if __name__ == "__main__": 87 | asyncio.run(main()) 88 | -------------------------------------------------------------------------------- /.github/workflows/python.yml: -------------------------------------------------------------------------------- 1 | # This file is autogenerated by maturin v1.2.3 2 | # To update, run 3 | # 4 | # maturin generate-ci github 5 | # 6 | name: CI 7 | 8 | on: 9 | push: 10 | branches: 11 | - main 12 | - master 13 | tags: 14 | - '*' 15 | pull_request: 16 | workflow_dispatch: 17 | 18 | permissions: 19 | contents: read 20 | 21 | jobs: 22 | linux: 23 | runs-on: ubuntu-latest 24 | strategy: 25 | matrix: 26 | target: [x86_64, aarch64] 27 | steps: 28 | - uses: actions/checkout@v4 29 | - uses: actions/setup-python@v5 30 | with: 31 | python-version: '3.10' 32 | - name: Install dependencies 33 | run: pip install ".[testing]" 34 | - name: Build wheels 35 | uses: PyO3/maturin-action@v1 36 | with: 37 | target: ${{ matrix.target }} 38 | before-script-linux: 'dnf install -y perl-IPC-Cmd && (python3 -m pip --version || python3 -m ensurepip)' 39 | manylinux: '2_28' 40 | args: --release --out dist --find-interpreter 41 | sccache: 'true' 42 | - name: Run tests 43 | run: pytest 44 | - name: Upload wheels 45 | uses: actions/upload-artifact@v4 46 | with: 47 | name: wheels-linux-${{ matrix.target }} 48 | path: dist 49 | 50 | windows: 51 | runs-on: windows-latest 52 | strategy: 53 | matrix: 54 | target: [x64] 55 | steps: 56 | - uses: actions/checkout@v4 57 | - uses: actions/setup-python@v5 58 | with: 59 | python-version: '3.10' 60 | architecture: ${{ matrix.target }} 61 | - name: Set up NASM 62 | uses: ilammy/setup-nasm@v1 63 | - name: Build wheels 64 | uses: PyO3/maturin-action@v1 65 | with: 66 | target: ${{ matrix.target }} 67 | args: --release --out dist --find-interpreter 68 | sccache: 'true' 69 | - name: Upload wheels 70 | uses: actions/upload-artifact@v4 71 | with: 72 | name: wheels-windows-${{ matrix.target }} 73 | path: dist 74 | 75 | macos: 76 | runs-on: macos-latest 77 | strategy: 78 | matrix: 79 | target: [x86_64, aarch64] 80 | steps: 81 | - uses: actions/checkout@v4 82 | - uses: actions/setup-python@v5 83 | with: 84 | python-version: '3.10' 85 | - name: Build wheels 86 | uses: PyO3/maturin-action@v1 87 | with: 88 | target: ${{ matrix.target }} 89 | args: --release --out dist --find-interpreter 90 | sccache: 'true' 91 | - name: Upload wheels 92 | uses: actions/upload-artifact@v4 93 | with: 94 | name: wheels-macos-${{ matrix.target }} 95 | path: dist 96 | 97 | sdist: 98 | runs-on: ubuntu-latest 99 | steps: 100 | - uses: actions/checkout@v4 101 | - name: Install dependencies 102 | run: pip install ".[testing]" 103 | - name: Build sdist 104 | uses: PyO3/maturin-action@v1 105 | with: 106 | command: sdist 107 | args: --out dist 108 | - name: Upload sdist 109 | uses: actions/upload-artifact@v4 110 | with: 111 | name: wheels-sdist 112 | path: dist 113 | 114 | release: 115 | name: Release 116 | runs-on: ubuntu-latest 117 | if: "startsWith(github.ref, 'refs/tags/')" 118 | needs: [linux, windows, macos, sdist] 119 | steps: 120 | - uses: actions/download-artifact@v4 121 | with: 122 | pattern: wheels-* 123 | merge-multiple: true 124 | - name: Publish to PyPI 125 | uses: PyO3/maturin-action@v1 126 | env: 127 | MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }} 128 | with: 129 | command: upload 130 | args: --non-interactive --skip-existing * 131 | -------------------------------------------------------------------------------- /src/receive_message.rs: -------------------------------------------------------------------------------- 1 | use iggy::messages::poll_messages::PollingStrategy as RustPollingStrategy; 2 | use iggy::models::messages::MessageState as RustMessageState; 3 | use iggy::models::messages::PolledMessage as RustReceiveMessage; 4 | use pyo3::prelude::*; 5 | use pyo3::types::PyBytes; 6 | use pyo3_stub_gen::derive::{gen_stub_pyclass, gen_stub_pyclass_enum, gen_stub_pymethods}; 7 | 8 | /// A Python class representing a received message. 9 | /// 10 | /// This class wraps a Rust message, allowing for access to its payload and offset from Python. 11 | #[pyclass] 12 | #[gen_stub_pyclass] 13 | pub struct ReceiveMessage { 14 | pub(crate) inner: RustReceiveMessage, 15 | } 16 | 17 | impl ReceiveMessage { 18 | /// Converts a Rust message into its corresponding Python representation. 19 | /// 20 | /// This is an internal utility function, not exposed to Python. 21 | pub(crate) fn from_rust_message(message: RustReceiveMessage) -> Self { 22 | Self { inner: message } 23 | } 24 | } 25 | 26 | #[gen_stub_pyclass_enum] 27 | #[pyclass(eq, eq_int)] 28 | #[derive(PartialEq)] 29 | pub enum MessageState { 30 | Available, 31 | Unavailable, 32 | Poisoned, 33 | MarkedForDeletion, 34 | } 35 | 36 | #[gen_stub_pymethods] 37 | #[pymethods] 38 | impl ReceiveMessage { 39 | /// Retrieves the payload of the received message. 40 | /// 41 | /// The payload is returned as a Python bytes object. 42 | pub fn payload(&self, py: Python) -> PyObject { 43 | PyBytes::new_bound(py, &self.inner.payload).into() 44 | } 45 | 46 | /// Retrieves the offset of the received message. 47 | /// 48 | /// The offset represents the position of the message within its topic. 49 | pub fn offset(&self) -> u64 { 50 | self.inner.offset 51 | } 52 | 53 | /// Retrieves the timestamp of the received message. 54 | /// 55 | /// The timestamp represents the time of the message within its topic. 56 | pub fn timestamp(&self) -> u64 { 57 | self.inner.timestamp 58 | } 59 | 60 | /// Retrieves the id of the received message. 61 | /// 62 | /// The id represents unique identifier of the message within its topic. 63 | pub fn id(&self) -> u128 { 64 | self.inner.id 65 | } 66 | 67 | /// Retrieves the checksum of the received message. 68 | /// 69 | /// The checksum represents the integrity of the message within its topic. 70 | pub fn checksum(&self) -> u32 { 71 | self.inner.checksum 72 | } 73 | 74 | /// Retrieves the Message's state of the received message. 75 | /// 76 | /// State represents the state of the response. 77 | pub fn state(&self) -> MessageState { 78 | match self.inner.state { 79 | RustMessageState::Available => MessageState::Available, 80 | RustMessageState::Unavailable => MessageState::Unavailable, 81 | RustMessageState::Poisoned => MessageState::Poisoned, 82 | RustMessageState::MarkedForDeletion => MessageState::MarkedForDeletion, 83 | } 84 | } 85 | 86 | /// Retrieves the length of the received message. 87 | /// 88 | /// The length represents the length of the payload. 89 | pub fn length(&self) -> u64 { 90 | self.inner.length.as_bytes_u64() 91 | } 92 | } 93 | 94 | #[derive(Clone, Copy)] 95 | #[gen_stub_pyclass_enum] 96 | #[pyclass] 97 | pub enum PollingStrategy { 98 | Offset { value: u64 }, 99 | Timestamp { value: u64 }, 100 | First {}, 101 | Last {}, 102 | Next {}, 103 | } 104 | 105 | impl From for RustPollingStrategy { 106 | fn from(value: PollingStrategy) -> Self { 107 | match value { 108 | PollingStrategy::Offset { value } => RustPollingStrategy::offset(value), 109 | PollingStrategy::Timestamp { value } => RustPollingStrategy::timestamp(value.into()), 110 | PollingStrategy::First {} => RustPollingStrategy::first(), 111 | PollingStrategy::Last {} => RustPollingStrategy::last(), 112 | PollingStrategy::Next {} => RustPollingStrategy::next(), 113 | } 114 | } 115 | } 116 | -------------------------------------------------------------------------------- /iggy_py.pyi: -------------------------------------------------------------------------------- 1 | # This file is automatically generated by pyo3_stub_gen 2 | # ruff: noqa: E501, F401 3 | 4 | import builtins 5 | import typing 6 | from enum import Enum, auto 7 | 8 | class IggyClient: 9 | r""" 10 | A Python class representing the Iggy client. 11 | It wraps the RustIggyClient and provides asynchronous functionality 12 | through the contained runtime. 13 | """ 14 | def new(self, conn:typing.Optional[builtins.str]) -> IggyClient: 15 | r""" 16 | Constructs a new IggyClient. 17 | 18 | This initializes a new runtime for asynchronous operations. 19 | Future versions might utilize asyncio for more Pythonic async. 20 | """ 21 | ... 22 | 23 | def ping(self) -> typing.Any: 24 | r""" 25 | Sends a ping request to the server to check connectivity. 26 | 27 | Returns `Ok(())` if the server responds successfully, or a `PyRuntimeError` 28 | if the connection fails. 29 | """ 30 | ... 31 | 32 | def login_user(self, username:builtins.str, password:builtins.str) -> typing.Any: 33 | r""" 34 | Logs in the user with the given credentials. 35 | 36 | Returns `Ok(())` on success, or a PyRuntimeError on failure. 37 | """ 38 | ... 39 | 40 | def connect(self) -> typing.Any: 41 | r""" 42 | Connects the IggyClient to its service. 43 | 44 | Returns Ok(()) on successful connection or a PyRuntimeError on failure. 45 | """ 46 | ... 47 | 48 | def create_stream(self, name:builtins.str, stream_id:typing.Optional[builtins.int]) -> typing.Any: 49 | r""" 50 | Creates a new stream with the provided ID and name. 51 | 52 | Returns Ok(()) on successful stream creation or a PyRuntimeError on failure. 53 | """ 54 | ... 55 | 56 | def get_stream(self, stream_id:PyIdentifier) -> typing.Any: 57 | r""" 58 | Gets stream by id. 59 | 60 | Returns Option of stream details or a PyRuntimeError on failure. 61 | """ 62 | ... 63 | 64 | def create_topic(self, stream:PyIdentifier, name:builtins.str, partitions_count:builtins.int, compression_algorithm:typing.Optional[builtins.str], topic_id:typing.Optional[builtins.int], replication_factor:typing.Optional[builtins.int]) -> typing.Any: 65 | r""" 66 | Creates a new topic with the given parameters. 67 | 68 | Returns Ok(()) on successful topic creation or a PyRuntimeError on failure. 69 | """ 70 | ... 71 | 72 | def get_topic(self, stream_id:PyIdentifier, topic_id:PyIdentifier) -> typing.Any: 73 | r""" 74 | Gets topic by stream and id. 75 | 76 | Returns Option of topic details or a PyRuntimeError on failure. 77 | """ 78 | ... 79 | 80 | def send_messages(self, stream:PyIdentifier, topic:PyIdentifier, partitioning:builtins.int, messages:list) -> typing.Any: 81 | r""" 82 | Sends a list of messages to the specified topic. 83 | 84 | Returns Ok(()) on successful sending or a PyRuntimeError on failure. 85 | """ 86 | ... 87 | 88 | def poll_messages(self, stream:PyIdentifier, topic:PyIdentifier, partition_id:builtins.int, polling_strategy:PollingStrategy, count:builtins.int, auto_commit:builtins.bool) -> typing.Any: 89 | r""" 90 | Polls for messages from the specified topic and partition. 91 | 92 | Returns a list of received messages or a PyRuntimeError on failure. 93 | """ 94 | ... 95 | 96 | 97 | class ReceiveMessage: 98 | r""" 99 | A Python class representing a received message. 100 | 101 | This class wraps a Rust message, allowing for access to its payload and offset from Python. 102 | """ 103 | def payload(self) -> typing.Any: 104 | r""" 105 | Retrieves the payload of the received message. 106 | 107 | The payload is returned as a Python bytes object. 108 | """ 109 | ... 110 | 111 | def offset(self) -> builtins.int: 112 | r""" 113 | Retrieves the offset of the received message. 114 | 115 | The offset represents the position of the message within its topic. 116 | """ 117 | ... 118 | 119 | def timestamp(self) -> builtins.int: 120 | r""" 121 | Retrieves the timestamp of the received message. 122 | 123 | The timestamp represents the time of the message within its topic. 124 | """ 125 | ... 126 | 127 | def id(self) -> builtins.int: 128 | r""" 129 | Retrieves the id of the received message. 130 | 131 | The id represents unique identifier of the message within its topic. 132 | """ 133 | ... 134 | 135 | def checksum(self) -> builtins.int: 136 | r""" 137 | Retrieves the checksum of the received message. 138 | 139 | The checksum represents the integrity of the message within its topic. 140 | """ 141 | ... 142 | 143 | def state(self) -> MessageState: 144 | r""" 145 | Retrieves the Message's state of the received message. 146 | 147 | State represents the state of the response. 148 | """ 149 | ... 150 | 151 | def length(self) -> builtins.int: 152 | r""" 153 | Retrieves the length of the received message. 154 | 155 | The length represents the length of the payload. 156 | """ 157 | ... 158 | 159 | 160 | class SendMessage: 161 | r""" 162 | A Python class representing a message to be sent. 163 | 164 | This class wraps a Rust message meant for sending, facilitating 165 | the creation of such messages from Python and their subsequent use in Rust. 166 | """ 167 | def __new__(cls,data:builtins.str): ... 168 | ... 169 | 170 | class StreamDetails: 171 | id: builtins.int 172 | name: builtins.str 173 | messages_count: builtins.int 174 | topics_count: builtins.int 175 | 176 | class TopicDetails: 177 | id: builtins.int 178 | name: builtins.str 179 | messages_count: builtins.int 180 | topics_count: builtins.int 181 | 182 | class MessageState(Enum): 183 | Available = auto() 184 | Unavailable = auto() 185 | Poisoned = auto() 186 | MarkedForDeletion = auto() 187 | 188 | class PollingStrategy(Enum): 189 | Offset = auto() 190 | Timestamp = auto() 191 | First = auto() 192 | Last = auto() 193 | Next = auto() 194 | 195 | class PyIdentifier(Enum): 196 | String = auto() 197 | Int = auto() 198 | 199 | -------------------------------------------------------------------------------- /src/client.rs: -------------------------------------------------------------------------------- 1 | use std::str::FromStr; 2 | use std::sync::Arc; 3 | 4 | use iggy::client::{SystemClient, TopicClient}; 5 | use iggy::client::{Client, MessageClient, StreamClient, UserClient}; 6 | use iggy::clients::builder::IggyClientBuilder; 7 | use iggy::clients::client::IggyClient as RustIggyClient; 8 | use iggy::compression::compression_algorithm::CompressionAlgorithm; 9 | use iggy::consumer::Consumer as RustConsumer; 10 | use iggy::identifier::Identifier; 11 | use iggy::messages::poll_messages::PollingStrategy as RustPollingStrategy; 12 | use iggy::messages::send_messages::{Message as RustMessage, Partitioning}; 13 | use iggy::utils::expiry::IggyExpiry; 14 | use iggy::utils::topic_size::MaxTopicSize; 15 | use pyo3::prelude::*; 16 | use pyo3::types::PyList; 17 | use pyo3_async_runtimes::tokio::future_into_py; 18 | use pyo3_stub_gen::define_stub_info_gatherer; 19 | use pyo3_stub_gen::derive::{gen_stub_pyclass, gen_stub_pyclass_enum, gen_stub_pymethods}; 20 | 21 | use crate::receive_message::{PollingStrategy, ReceiveMessage}; 22 | use crate::send_message::SendMessage; 23 | use crate::stream::StreamDetails; 24 | use crate::topic::TopicDetails; 25 | 26 | /// A Python class representing the Iggy client. 27 | /// It wraps the RustIggyClient and provides asynchronous functionality 28 | /// through the contained runtime. 29 | #[gen_stub_pyclass] 30 | #[pyclass] 31 | pub struct IggyClient { 32 | inner: Arc, 33 | } 34 | 35 | #[gen_stub_pyclass_enum] 36 | #[derive(FromPyObject)] 37 | enum PyIdentifier { 38 | #[pyo3(transparent, annotation = "str")] 39 | String(String), 40 | #[pyo3(transparent, annotation = "int")] 41 | Int(u32), 42 | } 43 | 44 | impl From for Identifier { 45 | fn from(py_identifier: PyIdentifier) -> Self { 46 | match py_identifier { 47 | PyIdentifier::String(s) => Identifier::from_str(&s).unwrap(), 48 | PyIdentifier::Int(i) => Identifier::numeric(i).unwrap(), 49 | } 50 | } 51 | } 52 | 53 | #[pymethods] 54 | #[gen_stub_pymethods] 55 | impl IggyClient { 56 | /// Constructs a new IggyClient. 57 | /// 58 | /// This initializes a new runtime for asynchronous operations. 59 | /// Future versions might utilize asyncio for more Pythonic async. 60 | #[new] 61 | #[pyo3(signature = (conn=None))] 62 | fn new(conn: Option) -> Self { 63 | let client = IggyClientBuilder::new() 64 | .with_tcp() 65 | .with_server_address(conn.unwrap_or("127.0.0.1:8090".to_string())) 66 | .build() 67 | .unwrap(); 68 | IggyClient { 69 | inner: Arc::new(client), 70 | } 71 | } 72 | 73 | /// Sends a ping request to the server to check connectivity. 74 | /// 75 | /// Returns `Ok(())` if the server responds successfully, or a `PyRuntimeError` 76 | /// if the connection fails. 77 | fn ping<'a>(&self, py: Python<'a>) -> PyResult> { 78 | let inner = self.inner.clone(); 79 | future_into_py(py, async move { 80 | inner.ping().await.map_err(|e| { 81 | PyErr::new::(format!("{:?}", e)) 82 | })?; 83 | Ok(()) 84 | }) 85 | } 86 | 87 | /// Logs in the user with the given credentials. 88 | /// 89 | /// Returns `Ok(())` on success, or a PyRuntimeError on failure. 90 | fn login_user<'a>( 91 | &self, 92 | py: Python<'a>, 93 | username: String, 94 | password: String, 95 | ) -> PyResult> { 96 | let inner = self.inner.clone(); 97 | future_into_py(py, async move { 98 | inner.login_user(&username, &password).await.map_err(|e| { 99 | PyErr::new::(format!("{:?}", e)) 100 | })?; 101 | Ok(()) 102 | }) 103 | } 104 | 105 | /// Connects the IggyClient to its service. 106 | /// 107 | /// Returns Ok(()) on successful connection or a PyRuntimeError on failure. 108 | fn connect<'a>(&self, py: Python<'a>) -> PyResult> { 109 | let inner = self.inner.clone(); 110 | future_into_py(py, async move { 111 | inner.connect().await.map_err(|e| { 112 | PyErr::new::(format!("{:?}", e)) 113 | })?; 114 | Ok(()) 115 | }) 116 | } 117 | 118 | /// Creates a new stream with the provided ID and name. 119 | /// 120 | /// Returns Ok(()) on successful stream creation or a PyRuntimeError on failure. 121 | #[pyo3(signature = (name, stream_id = None))] 122 | fn create_stream<'a>( 123 | &self, 124 | py: Python<'a>, 125 | name: String, 126 | stream_id: Option, 127 | ) -> PyResult> { 128 | let inner = self.inner.clone(); 129 | future_into_py(py, async move { 130 | inner.create_stream(&name, stream_id).await.map_err(|e| { 131 | PyErr::new::(format!("{:?}", e)) 132 | })?; 133 | Ok(()) 134 | }) 135 | } 136 | 137 | /// Gets stream by id. 138 | /// 139 | /// Returns Option of stream details or a PyRuntimeError on failure. 140 | fn get_stream<'a>( 141 | &self, 142 | py: Python<'a>, 143 | stream_id: PyIdentifier, 144 | ) -> PyResult> { 145 | let stream_id = Identifier::from(stream_id); 146 | let inner = self.inner.clone(); 147 | 148 | future_into_py(py, async move { 149 | let stream = inner.get_stream(&stream_id).await.map_err(|e| { 150 | PyErr::new::(format!("{:?}", e)) 151 | })?; 152 | Ok(stream.map(StreamDetails::from)) 153 | }) 154 | } 155 | 156 | /// Creates a new topic with the given parameters. 157 | /// 158 | /// Returns Ok(()) on successful topic creation or a PyRuntimeError on failure. 159 | #[pyo3( 160 | signature = (stream, name, partitions_count, compression_algorithm = None, topic_id = None, replication_factor = None) 161 | )] 162 | #[allow(clippy::too_many_arguments)] 163 | fn create_topic<'a>( 164 | &self, 165 | py: Python<'a>, 166 | stream: PyIdentifier, 167 | name: String, 168 | partitions_count: u32, 169 | compression_algorithm: Option, 170 | topic_id: Option, 171 | replication_factor: Option, 172 | ) -> PyResult> { 173 | let compression_algorithm = match compression_algorithm { 174 | Some(algo) => CompressionAlgorithm::from_str(&algo).map_err(|e| { 175 | PyErr::new::(format!("{:?}", e)) 176 | })?, 177 | None => CompressionAlgorithm::default(), 178 | }; 179 | 180 | let stream = Identifier::from(stream); 181 | let inner = self.inner.clone(); 182 | 183 | future_into_py(py, async move { 184 | inner 185 | .create_topic( 186 | &stream, 187 | &name, 188 | partitions_count, 189 | compression_algorithm, 190 | replication_factor, 191 | topic_id, 192 | IggyExpiry::NeverExpire, 193 | MaxTopicSize::ServerDefault, 194 | ) 195 | .await 196 | .map_err(|e| { 197 | PyErr::new::(format!("{:?}", e)) 198 | })?; 199 | Ok(()) 200 | }) 201 | } 202 | 203 | /// Gets topic by stream and id. 204 | /// 205 | /// Returns Option of topic details or a PyRuntimeError on failure. 206 | fn get_topic<'a>( 207 | &self, 208 | py: Python<'a>, 209 | stream_id: PyIdentifier, 210 | topic_id: PyIdentifier, 211 | ) -> PyResult> { 212 | let stream_id = Identifier::from(stream_id); 213 | let topic_id = Identifier::from(topic_id); 214 | let inner = self.inner.clone(); 215 | 216 | future_into_py(py, async move { 217 | let topic = inner.get_topic(&stream_id, &topic_id).await.map_err(|e| { 218 | PyErr::new::(format!("{:?}", e)) 219 | })?; 220 | Ok(topic.map(TopicDetails::from)) 221 | }) 222 | } 223 | 224 | /// Sends a list of messages to the specified topic. 225 | /// 226 | /// Returns Ok(()) on successful sending or a PyRuntimeError on failure. 227 | fn send_messages<'a>( 228 | &self, 229 | py: Python<'a>, 230 | stream: PyIdentifier, 231 | topic: PyIdentifier, 232 | partitioning: u32, 233 | messages: &Bound<'_, PyList>, 234 | ) -> PyResult> { 235 | let messages: Vec = messages 236 | .iter() 237 | .map(|item| item.extract::()) 238 | .collect::, _>>()?; 239 | let mut messages: Vec = messages 240 | .into_iter() 241 | .map(|message| message.inner) 242 | .collect::>(); 243 | 244 | let stream = Identifier::from(stream); 245 | let topic = Identifier::from(topic); 246 | let partitioning = Partitioning::partition_id(partitioning); 247 | let inner = self.inner.clone(); 248 | 249 | future_into_py(py, async move { 250 | inner 251 | .send_messages(&stream, &topic, &partitioning, messages.as_mut()) 252 | .await 253 | .map_err(|e| { 254 | PyErr::new::(format!("{:?}", e)) 255 | })?; 256 | Ok(()) 257 | }) 258 | } 259 | 260 | /// Polls for messages from the specified topic and partition. 261 | /// 262 | /// Returns a list of received messages or a PyRuntimeError on failure. 263 | #[allow(clippy::too_many_arguments)] 264 | fn poll_messages<'a>( 265 | &self, 266 | py: Python<'a>, 267 | stream: PyIdentifier, 268 | topic: PyIdentifier, 269 | partition_id: u32, 270 | polling_strategy: &PollingStrategy, 271 | count: u32, 272 | auto_commit: bool, 273 | ) -> PyResult> { 274 | let consumer = RustConsumer::default(); 275 | let stream = Identifier::from(stream); 276 | let topic = Identifier::from(topic); 277 | let strategy: RustPollingStrategy = (*polling_strategy).into(); 278 | 279 | let inner = self.inner.clone(); 280 | 281 | future_into_py(py, async move { 282 | let polled_messages = inner 283 | .poll_messages( 284 | &stream, 285 | &topic, 286 | Some(partition_id), 287 | &consumer, 288 | &strategy, 289 | count, 290 | auto_commit, 291 | ) 292 | .await 293 | .map_err(|e| { 294 | PyErr::new::(format!("{:?}", e)) 295 | })?; 296 | let messages = polled_messages 297 | .messages 298 | .into_iter() 299 | .map(ReceiveMessage::from_rust_message) 300 | .collect::>(); 301 | Ok(messages) 302 | }) 303 | } 304 | } 305 | 306 | define_stub_info_gatherer!(stub_info); 307 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 4 4 | 5 | [[package]] 6 | name = "addr2line" 7 | version = "0.24.2" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" 10 | dependencies = [ 11 | "gimli", 12 | ] 13 | 14 | [[package]] 15 | name = "adler2" 16 | version = "2.0.0" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" 19 | 20 | [[package]] 21 | name = "aead" 22 | version = "0.5.2" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" 25 | dependencies = [ 26 | "crypto-common", 27 | "generic-array", 28 | ] 29 | 30 | [[package]] 31 | name = "aes" 32 | version = "0.8.4" 33 | source = "registry+https://github.com/rust-lang/crates.io-index" 34 | checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" 35 | dependencies = [ 36 | "cfg-if", 37 | "cipher", 38 | "cpufeatures", 39 | ] 40 | 41 | [[package]] 42 | name = "aes-gcm" 43 | version = "0.10.3" 44 | source = "registry+https://github.com/rust-lang/crates.io-index" 45 | checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" 46 | dependencies = [ 47 | "aead", 48 | "aes", 49 | "cipher", 50 | "ctr", 51 | "ghash", 52 | "subtle", 53 | ] 54 | 55 | [[package]] 56 | name = "ahash" 57 | version = "0.7.8" 58 | source = "registry+https://github.com/rust-lang/crates.io-index" 59 | checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" 60 | dependencies = [ 61 | "getrandom 0.2.15", 62 | "once_cell", 63 | "version_check", 64 | ] 65 | 66 | [[package]] 67 | name = "ahash" 68 | version = "0.8.11" 69 | source = "registry+https://github.com/rust-lang/crates.io-index" 70 | checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" 71 | dependencies = [ 72 | "cfg-if", 73 | "getrandom 0.2.15", 74 | "once_cell", 75 | "serde", 76 | "version_check", 77 | "zerocopy 0.7.35", 78 | ] 79 | 80 | [[package]] 81 | name = "aho-corasick" 82 | version = "1.1.3" 83 | source = "registry+https://github.com/rust-lang/crates.io-index" 84 | checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 85 | dependencies = [ 86 | "memchr", 87 | ] 88 | 89 | [[package]] 90 | name = "android-tzdata" 91 | version = "0.1.1" 92 | source = "registry+https://github.com/rust-lang/crates.io-index" 93 | checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" 94 | 95 | [[package]] 96 | name = "android_system_properties" 97 | version = "0.1.5" 98 | source = "registry+https://github.com/rust-lang/crates.io-index" 99 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 100 | dependencies = [ 101 | "libc", 102 | ] 103 | 104 | [[package]] 105 | name = "anstream" 106 | version = "0.6.18" 107 | source = "registry+https://github.com/rust-lang/crates.io-index" 108 | checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" 109 | dependencies = [ 110 | "anstyle", 111 | "anstyle-parse", 112 | "anstyle-query", 113 | "anstyle-wincon", 114 | "colorchoice", 115 | "is_terminal_polyfill", 116 | "utf8parse", 117 | ] 118 | 119 | [[package]] 120 | name = "anstyle" 121 | version = "1.0.10" 122 | source = "registry+https://github.com/rust-lang/crates.io-index" 123 | checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" 124 | 125 | [[package]] 126 | name = "anstyle-parse" 127 | version = "0.2.6" 128 | source = "registry+https://github.com/rust-lang/crates.io-index" 129 | checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" 130 | dependencies = [ 131 | "utf8parse", 132 | ] 133 | 134 | [[package]] 135 | name = "anstyle-query" 136 | version = "1.1.2" 137 | source = "registry+https://github.com/rust-lang/crates.io-index" 138 | checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" 139 | dependencies = [ 140 | "windows-sys 0.59.0", 141 | ] 142 | 143 | [[package]] 144 | name = "anstyle-wincon" 145 | version = "3.0.7" 146 | source = "registry+https://github.com/rust-lang/crates.io-index" 147 | checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" 148 | dependencies = [ 149 | "anstyle", 150 | "once_cell", 151 | "windows-sys 0.59.0", 152 | ] 153 | 154 | [[package]] 155 | name = "anyhow" 156 | version = "1.0.96" 157 | source = "registry+https://github.com/rust-lang/crates.io-index" 158 | checksum = "6b964d184e89d9b6b67dd2715bc8e74cf3107fb2b529990c90cf517326150bf4" 159 | 160 | [[package]] 161 | name = "arrayvec" 162 | version = "0.7.6" 163 | source = "registry+https://github.com/rust-lang/crates.io-index" 164 | checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" 165 | 166 | [[package]] 167 | name = "async-broadcast" 168 | version = "0.7.2" 169 | source = "registry+https://github.com/rust-lang/crates.io-index" 170 | checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" 171 | dependencies = [ 172 | "event-listener", 173 | "event-listener-strategy", 174 | "futures-core", 175 | "pin-project-lite", 176 | ] 177 | 178 | [[package]] 179 | name = "async-dropper" 180 | version = "0.3.1" 181 | source = "registry+https://github.com/rust-lang/crates.io-index" 182 | checksum = "d901072ae4dcdca2201b98beb02d31fb4b6b2472fbd0e870b12ec15b8b35b2d2" 183 | dependencies = [ 184 | "async-dropper-derive", 185 | "async-dropper-simple", 186 | "async-trait", 187 | "futures", 188 | "tokio", 189 | ] 190 | 191 | [[package]] 192 | name = "async-dropper-derive" 193 | version = "0.3.1" 194 | source = "registry+https://github.com/rust-lang/crates.io-index" 195 | checksum = "a35cf17a37761f1c88b8e770b5956820fe84c12854165b6f930c604ea186e47e" 196 | dependencies = [ 197 | "async-trait", 198 | "proc-macro2", 199 | "quote", 200 | "syn 2.0.98", 201 | "tokio", 202 | ] 203 | 204 | [[package]] 205 | name = "async-dropper-simple" 206 | version = "0.2.6" 207 | source = "registry+https://github.com/rust-lang/crates.io-index" 208 | checksum = "a7c4748dfe8cd3d625ec68fc424fa80c134319881185866f9e173af9e5d8add8" 209 | dependencies = [ 210 | "async-scoped", 211 | "async-trait", 212 | "futures", 213 | "rustc_version", 214 | "tokio", 215 | ] 216 | 217 | [[package]] 218 | name = "async-scoped" 219 | version = "0.9.0" 220 | source = "registry+https://github.com/rust-lang/crates.io-index" 221 | checksum = "4042078ea593edffc452eef14e99fdb2b120caa4ad9618bcdeabc4a023b98740" 222 | dependencies = [ 223 | "futures", 224 | "pin-project", 225 | "tokio", 226 | ] 227 | 228 | [[package]] 229 | name = "async-trait" 230 | version = "0.1.86" 231 | source = "registry+https://github.com/rust-lang/crates.io-index" 232 | checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d" 233 | dependencies = [ 234 | "proc-macro2", 235 | "quote", 236 | "syn 2.0.98", 237 | ] 238 | 239 | [[package]] 240 | name = "autocfg" 241 | version = "1.4.0" 242 | source = "registry+https://github.com/rust-lang/crates.io-index" 243 | checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" 244 | 245 | [[package]] 246 | name = "aws-lc-rs" 247 | version = "1.12.3" 248 | source = "registry+https://github.com/rust-lang/crates.io-index" 249 | checksum = "3c6a895b664295a4ba0c2c0203c7075ea585dd75cd5c37a8efac829e13e460ef" 250 | dependencies = [ 251 | "aws-lc-sys", 252 | "paste", 253 | "zeroize", 254 | ] 255 | 256 | [[package]] 257 | name = "aws-lc-sys" 258 | version = "0.26.0" 259 | source = "registry+https://github.com/rust-lang/crates.io-index" 260 | checksum = "0f9dd2e03ee80ca2822dd6ea431163d2ef259f2066a4d6ccaca6d9dcb386aa43" 261 | dependencies = [ 262 | "bindgen", 263 | "cc", 264 | "cmake", 265 | "dunce", 266 | "fs_extra", 267 | "paste", 268 | ] 269 | 270 | [[package]] 271 | name = "backtrace" 272 | version = "0.3.74" 273 | source = "registry+https://github.com/rust-lang/crates.io-index" 274 | checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" 275 | dependencies = [ 276 | "addr2line", 277 | "cfg-if", 278 | "libc", 279 | "miniz_oxide", 280 | "object", 281 | "rustc-demangle", 282 | "windows-targets", 283 | ] 284 | 285 | [[package]] 286 | name = "base64" 287 | version = "0.22.1" 288 | source = "registry+https://github.com/rust-lang/crates.io-index" 289 | checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 290 | 291 | [[package]] 292 | name = "bindgen" 293 | version = "0.69.5" 294 | source = "registry+https://github.com/rust-lang/crates.io-index" 295 | checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" 296 | dependencies = [ 297 | "bitflags 2.8.0", 298 | "cexpr", 299 | "clang-sys", 300 | "itertools 0.12.1", 301 | "lazy_static", 302 | "lazycell", 303 | "log", 304 | "prettyplease", 305 | "proc-macro2", 306 | "quote", 307 | "regex", 308 | "rustc-hash 1.1.0", 309 | "shlex", 310 | "syn 2.0.98", 311 | "which", 312 | ] 313 | 314 | [[package]] 315 | name = "bitflags" 316 | version = "1.3.2" 317 | source = "registry+https://github.com/rust-lang/crates.io-index" 318 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 319 | 320 | [[package]] 321 | name = "bitflags" 322 | version = "2.8.0" 323 | source = "registry+https://github.com/rust-lang/crates.io-index" 324 | checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" 325 | 326 | [[package]] 327 | name = "bitvec" 328 | version = "1.0.1" 329 | source = "registry+https://github.com/rust-lang/crates.io-index" 330 | checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" 331 | dependencies = [ 332 | "funty", 333 | "radium", 334 | "tap", 335 | "wyz", 336 | ] 337 | 338 | [[package]] 339 | name = "bon" 340 | version = "3.3.2" 341 | source = "registry+https://github.com/rust-lang/crates.io-index" 342 | checksum = "fe7acc34ff59877422326db7d6f2d845a582b16396b6b08194942bf34c6528ab" 343 | dependencies = [ 344 | "bon-macros", 345 | "rustversion", 346 | ] 347 | 348 | [[package]] 349 | name = "bon-macros" 350 | version = "3.3.2" 351 | source = "registry+https://github.com/rust-lang/crates.io-index" 352 | checksum = "4159dd617a7fbc9be6a692fe69dc2954f8e6bb6bb5e4d7578467441390d77fd0" 353 | dependencies = [ 354 | "darling", 355 | "ident_case", 356 | "prettyplease", 357 | "proc-macro2", 358 | "quote", 359 | "rustversion", 360 | "syn 2.0.98", 361 | ] 362 | 363 | [[package]] 364 | name = "borsh" 365 | version = "1.5.5" 366 | source = "registry+https://github.com/rust-lang/crates.io-index" 367 | checksum = "5430e3be710b68d984d1391c854eb431a9d548640711faa54eecb1df93db91cc" 368 | dependencies = [ 369 | "borsh-derive", 370 | "cfg_aliases", 371 | ] 372 | 373 | [[package]] 374 | name = "borsh-derive" 375 | version = "1.5.5" 376 | source = "registry+https://github.com/rust-lang/crates.io-index" 377 | checksum = "f8b668d39970baad5356d7c83a86fee3a539e6f93bf6764c97368243e17a0487" 378 | dependencies = [ 379 | "once_cell", 380 | "proc-macro-crate", 381 | "proc-macro2", 382 | "quote", 383 | "syn 2.0.98", 384 | ] 385 | 386 | [[package]] 387 | name = "bumpalo" 388 | version = "3.17.0" 389 | source = "registry+https://github.com/rust-lang/crates.io-index" 390 | checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" 391 | 392 | [[package]] 393 | name = "byte-unit" 394 | version = "5.1.6" 395 | source = "registry+https://github.com/rust-lang/crates.io-index" 396 | checksum = "e1cd29c3c585209b0cbc7309bfe3ed7efd8c84c21b7af29c8bfae908f8777174" 397 | dependencies = [ 398 | "rust_decimal", 399 | "serde", 400 | "utf8-width", 401 | ] 402 | 403 | [[package]] 404 | name = "bytecheck" 405 | version = "0.6.12" 406 | source = "registry+https://github.com/rust-lang/crates.io-index" 407 | checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" 408 | dependencies = [ 409 | "bytecheck_derive", 410 | "ptr_meta", 411 | "simdutf8", 412 | ] 413 | 414 | [[package]] 415 | name = "bytecheck_derive" 416 | version = "0.6.12" 417 | source = "registry+https://github.com/rust-lang/crates.io-index" 418 | checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" 419 | dependencies = [ 420 | "proc-macro2", 421 | "quote", 422 | "syn 1.0.109", 423 | ] 424 | 425 | [[package]] 426 | name = "byteorder" 427 | version = "1.5.0" 428 | source = "registry+https://github.com/rust-lang/crates.io-index" 429 | checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 430 | 431 | [[package]] 432 | name = "bytes" 433 | version = "1.10.0" 434 | source = "registry+https://github.com/rust-lang/crates.io-index" 435 | checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" 436 | 437 | [[package]] 438 | name = "cc" 439 | version = "1.2.14" 440 | source = "registry+https://github.com/rust-lang/crates.io-index" 441 | checksum = "0c3d1b2e905a3a7b00a6141adb0e4c0bb941d11caf55349d863942a1cc44e3c9" 442 | dependencies = [ 443 | "jobserver", 444 | "libc", 445 | "shlex", 446 | ] 447 | 448 | [[package]] 449 | name = "cesu8" 450 | version = "1.1.0" 451 | source = "registry+https://github.com/rust-lang/crates.io-index" 452 | checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" 453 | 454 | [[package]] 455 | name = "cexpr" 456 | version = "0.6.0" 457 | source = "registry+https://github.com/rust-lang/crates.io-index" 458 | checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" 459 | dependencies = [ 460 | "nom", 461 | ] 462 | 463 | [[package]] 464 | name = "cfg-if" 465 | version = "1.0.0" 466 | source = "registry+https://github.com/rust-lang/crates.io-index" 467 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 468 | 469 | [[package]] 470 | name = "cfg_aliases" 471 | version = "0.2.1" 472 | source = "registry+https://github.com/rust-lang/crates.io-index" 473 | checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" 474 | 475 | [[package]] 476 | name = "chrono" 477 | version = "0.4.39" 478 | source = "registry+https://github.com/rust-lang/crates.io-index" 479 | checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" 480 | dependencies = [ 481 | "android-tzdata", 482 | "iana-time-zone", 483 | "js-sys", 484 | "num-traits", 485 | "serde", 486 | "wasm-bindgen", 487 | "windows-targets", 488 | ] 489 | 490 | [[package]] 491 | name = "cipher" 492 | version = "0.4.4" 493 | source = "registry+https://github.com/rust-lang/crates.io-index" 494 | checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" 495 | dependencies = [ 496 | "crypto-common", 497 | "inout", 498 | ] 499 | 500 | [[package]] 501 | name = "clang-sys" 502 | version = "1.8.1" 503 | source = "registry+https://github.com/rust-lang/crates.io-index" 504 | checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" 505 | dependencies = [ 506 | "glob", 507 | "libc", 508 | "libloading", 509 | ] 510 | 511 | [[package]] 512 | name = "clap" 513 | version = "4.5.30" 514 | source = "registry+https://github.com/rust-lang/crates.io-index" 515 | checksum = "92b7b18d71fad5313a1e320fa9897994228ce274b60faa4d694fe0ea89cd9e6d" 516 | dependencies = [ 517 | "clap_builder", 518 | "clap_derive", 519 | ] 520 | 521 | [[package]] 522 | name = "clap_builder" 523 | version = "4.5.30" 524 | source = "registry+https://github.com/rust-lang/crates.io-index" 525 | checksum = "a35db2071778a7344791a4fb4f95308b5673d219dee3ae348b86642574ecc90c" 526 | dependencies = [ 527 | "anstream", 528 | "anstyle", 529 | "clap_lex", 530 | "strsim", 531 | ] 532 | 533 | [[package]] 534 | name = "clap_derive" 535 | version = "4.5.28" 536 | source = "registry+https://github.com/rust-lang/crates.io-index" 537 | checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed" 538 | dependencies = [ 539 | "heck", 540 | "proc-macro2", 541 | "quote", 542 | "syn 2.0.98", 543 | ] 544 | 545 | [[package]] 546 | name = "clap_lex" 547 | version = "0.7.4" 548 | source = "registry+https://github.com/rust-lang/crates.io-index" 549 | checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" 550 | 551 | [[package]] 552 | name = "cmake" 553 | version = "0.1.54" 554 | source = "registry+https://github.com/rust-lang/crates.io-index" 555 | checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0" 556 | dependencies = [ 557 | "cc", 558 | ] 559 | 560 | [[package]] 561 | name = "colorchoice" 562 | version = "1.0.3" 563 | source = "registry+https://github.com/rust-lang/crates.io-index" 564 | checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" 565 | 566 | [[package]] 567 | name = "combine" 568 | version = "4.6.7" 569 | source = "registry+https://github.com/rust-lang/crates.io-index" 570 | checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" 571 | dependencies = [ 572 | "bytes", 573 | "memchr", 574 | ] 575 | 576 | [[package]] 577 | name = "concurrent-queue" 578 | version = "2.5.0" 579 | source = "registry+https://github.com/rust-lang/crates.io-index" 580 | checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" 581 | dependencies = [ 582 | "crossbeam-utils", 583 | ] 584 | 585 | [[package]] 586 | name = "convert_case" 587 | version = "0.7.1" 588 | source = "registry+https://github.com/rust-lang/crates.io-index" 589 | checksum = "bb402b8d4c85569410425650ce3eddc7d698ed96d39a73f941b08fb63082f1e7" 590 | dependencies = [ 591 | "unicode-segmentation", 592 | ] 593 | 594 | [[package]] 595 | name = "core-foundation" 596 | version = "0.9.4" 597 | source = "registry+https://github.com/rust-lang/crates.io-index" 598 | checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 599 | dependencies = [ 600 | "core-foundation-sys", 601 | "libc", 602 | ] 603 | 604 | [[package]] 605 | name = "core-foundation-sys" 606 | version = "0.8.7" 607 | source = "registry+https://github.com/rust-lang/crates.io-index" 608 | checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 609 | 610 | [[package]] 611 | name = "cpufeatures" 612 | version = "0.2.17" 613 | source = "registry+https://github.com/rust-lang/crates.io-index" 614 | checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" 615 | dependencies = [ 616 | "libc", 617 | ] 618 | 619 | [[package]] 620 | name = "crc32fast" 621 | version = "1.4.2" 622 | source = "registry+https://github.com/rust-lang/crates.io-index" 623 | checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" 624 | dependencies = [ 625 | "cfg-if", 626 | ] 627 | 628 | [[package]] 629 | name = "crossbeam-utils" 630 | version = "0.8.21" 631 | source = "registry+https://github.com/rust-lang/crates.io-index" 632 | checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 633 | 634 | [[package]] 635 | name = "crypto-common" 636 | version = "0.1.6" 637 | source = "registry+https://github.com/rust-lang/crates.io-index" 638 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 639 | dependencies = [ 640 | "generic-array", 641 | "rand_core 0.6.4", 642 | "typenum", 643 | ] 644 | 645 | [[package]] 646 | name = "ctr" 647 | version = "0.9.2" 648 | source = "registry+https://github.com/rust-lang/crates.io-index" 649 | checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" 650 | dependencies = [ 651 | "cipher", 652 | ] 653 | 654 | [[package]] 655 | name = "darling" 656 | version = "0.20.10" 657 | source = "registry+https://github.com/rust-lang/crates.io-index" 658 | checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" 659 | dependencies = [ 660 | "darling_core", 661 | "darling_macro", 662 | ] 663 | 664 | [[package]] 665 | name = "darling_core" 666 | version = "0.20.10" 667 | source = "registry+https://github.com/rust-lang/crates.io-index" 668 | checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" 669 | dependencies = [ 670 | "fnv", 671 | "ident_case", 672 | "proc-macro2", 673 | "quote", 674 | "strsim", 675 | "syn 2.0.98", 676 | ] 677 | 678 | [[package]] 679 | name = "darling_macro" 680 | version = "0.20.10" 681 | source = "registry+https://github.com/rust-lang/crates.io-index" 682 | checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" 683 | dependencies = [ 684 | "darling_core", 685 | "quote", 686 | "syn 2.0.98", 687 | ] 688 | 689 | [[package]] 690 | name = "dashmap" 691 | version = "6.1.0" 692 | source = "registry+https://github.com/rust-lang/crates.io-index" 693 | checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" 694 | dependencies = [ 695 | "cfg-if", 696 | "crossbeam-utils", 697 | "hashbrown 0.14.5", 698 | "lock_api", 699 | "once_cell", 700 | "parking_lot_core 0.9.10", 701 | ] 702 | 703 | [[package]] 704 | name = "deranged" 705 | version = "0.3.11" 706 | source = "registry+https://github.com/rust-lang/crates.io-index" 707 | checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" 708 | dependencies = [ 709 | "powerfmt", 710 | "serde", 711 | ] 712 | 713 | [[package]] 714 | name = "derive_more" 715 | version = "2.0.1" 716 | source = "registry+https://github.com/rust-lang/crates.io-index" 717 | checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" 718 | dependencies = [ 719 | "derive_more-impl", 720 | ] 721 | 722 | [[package]] 723 | name = "derive_more-impl" 724 | version = "2.0.1" 725 | source = "registry+https://github.com/rust-lang/crates.io-index" 726 | checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" 727 | dependencies = [ 728 | "convert_case", 729 | "proc-macro2", 730 | "quote", 731 | "syn 2.0.98", 732 | "unicode-xid", 733 | ] 734 | 735 | [[package]] 736 | name = "dirs" 737 | version = "6.0.0" 738 | source = "registry+https://github.com/rust-lang/crates.io-index" 739 | checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" 740 | dependencies = [ 741 | "dirs-sys", 742 | ] 743 | 744 | [[package]] 745 | name = "dirs-sys" 746 | version = "0.5.0" 747 | source = "registry+https://github.com/rust-lang/crates.io-index" 748 | checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" 749 | dependencies = [ 750 | "libc", 751 | "option-ext", 752 | "redox_users", 753 | "windows-sys 0.59.0", 754 | ] 755 | 756 | [[package]] 757 | name = "displaydoc" 758 | version = "0.2.5" 759 | source = "registry+https://github.com/rust-lang/crates.io-index" 760 | checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 761 | dependencies = [ 762 | "proc-macro2", 763 | "quote", 764 | "syn 2.0.98", 765 | ] 766 | 767 | [[package]] 768 | name = "dunce" 769 | version = "1.0.5" 770 | source = "registry+https://github.com/rust-lang/crates.io-index" 771 | checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" 772 | 773 | [[package]] 774 | name = "either" 775 | version = "1.13.0" 776 | source = "registry+https://github.com/rust-lang/crates.io-index" 777 | checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" 778 | 779 | [[package]] 780 | name = "equivalent" 781 | version = "1.0.2" 782 | source = "registry+https://github.com/rust-lang/crates.io-index" 783 | checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 784 | 785 | [[package]] 786 | name = "errno" 787 | version = "0.3.10" 788 | source = "registry+https://github.com/rust-lang/crates.io-index" 789 | checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" 790 | dependencies = [ 791 | "libc", 792 | "windows-sys 0.59.0", 793 | ] 794 | 795 | [[package]] 796 | name = "event-listener" 797 | version = "5.4.0" 798 | source = "registry+https://github.com/rust-lang/crates.io-index" 799 | checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" 800 | dependencies = [ 801 | "concurrent-queue", 802 | "parking", 803 | "pin-project-lite", 804 | ] 805 | 806 | [[package]] 807 | name = "event-listener-strategy" 808 | version = "0.5.3" 809 | source = "registry+https://github.com/rust-lang/crates.io-index" 810 | checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" 811 | dependencies = [ 812 | "event-listener", 813 | "pin-project-lite", 814 | ] 815 | 816 | [[package]] 817 | name = "flume" 818 | version = "0.11.1" 819 | source = "registry+https://github.com/rust-lang/crates.io-index" 820 | checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" 821 | dependencies = [ 822 | "futures-core", 823 | "futures-sink", 824 | "nanorand", 825 | "spin", 826 | ] 827 | 828 | [[package]] 829 | name = "fnv" 830 | version = "1.0.7" 831 | source = "registry+https://github.com/rust-lang/crates.io-index" 832 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 833 | 834 | [[package]] 835 | name = "form_urlencoded" 836 | version = "1.2.1" 837 | source = "registry+https://github.com/rust-lang/crates.io-index" 838 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 839 | dependencies = [ 840 | "percent-encoding", 841 | ] 842 | 843 | [[package]] 844 | name = "fs_extra" 845 | version = "1.3.0" 846 | source = "registry+https://github.com/rust-lang/crates.io-index" 847 | checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" 848 | 849 | [[package]] 850 | name = "funty" 851 | version = "2.0.0" 852 | source = "registry+https://github.com/rust-lang/crates.io-index" 853 | checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" 854 | 855 | [[package]] 856 | name = "futures" 857 | version = "0.3.31" 858 | source = "registry+https://github.com/rust-lang/crates.io-index" 859 | checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" 860 | dependencies = [ 861 | "futures-channel", 862 | "futures-core", 863 | "futures-executor", 864 | "futures-io", 865 | "futures-sink", 866 | "futures-task", 867 | "futures-util", 868 | ] 869 | 870 | [[package]] 871 | name = "futures-channel" 872 | version = "0.3.31" 873 | source = "registry+https://github.com/rust-lang/crates.io-index" 874 | checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" 875 | dependencies = [ 876 | "futures-core", 877 | "futures-sink", 878 | ] 879 | 880 | [[package]] 881 | name = "futures-core" 882 | version = "0.3.31" 883 | source = "registry+https://github.com/rust-lang/crates.io-index" 884 | checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 885 | 886 | [[package]] 887 | name = "futures-executor" 888 | version = "0.3.31" 889 | source = "registry+https://github.com/rust-lang/crates.io-index" 890 | checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" 891 | dependencies = [ 892 | "futures-core", 893 | "futures-task", 894 | "futures-util", 895 | ] 896 | 897 | [[package]] 898 | name = "futures-io" 899 | version = "0.3.31" 900 | source = "registry+https://github.com/rust-lang/crates.io-index" 901 | checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" 902 | 903 | [[package]] 904 | name = "futures-macro" 905 | version = "0.3.31" 906 | source = "registry+https://github.com/rust-lang/crates.io-index" 907 | checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" 908 | dependencies = [ 909 | "proc-macro2", 910 | "quote", 911 | "syn 2.0.98", 912 | ] 913 | 914 | [[package]] 915 | name = "futures-sink" 916 | version = "0.3.31" 917 | source = "registry+https://github.com/rust-lang/crates.io-index" 918 | checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" 919 | 920 | [[package]] 921 | name = "futures-task" 922 | version = "0.3.31" 923 | source = "registry+https://github.com/rust-lang/crates.io-index" 924 | checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 925 | 926 | [[package]] 927 | name = "futures-util" 928 | version = "0.3.31" 929 | source = "registry+https://github.com/rust-lang/crates.io-index" 930 | checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 931 | dependencies = [ 932 | "futures-channel", 933 | "futures-core", 934 | "futures-io", 935 | "futures-macro", 936 | "futures-sink", 937 | "futures-task", 938 | "memchr", 939 | "pin-project-lite", 940 | "pin-utils", 941 | "slab", 942 | ] 943 | 944 | [[package]] 945 | name = "generic-array" 946 | version = "0.14.7" 947 | source = "registry+https://github.com/rust-lang/crates.io-index" 948 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 949 | dependencies = [ 950 | "typenum", 951 | "version_check", 952 | ] 953 | 954 | [[package]] 955 | name = "getrandom" 956 | version = "0.2.15" 957 | source = "registry+https://github.com/rust-lang/crates.io-index" 958 | checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" 959 | dependencies = [ 960 | "cfg-if", 961 | "js-sys", 962 | "libc", 963 | "wasi 0.11.0+wasi-snapshot-preview1", 964 | "wasm-bindgen", 965 | ] 966 | 967 | [[package]] 968 | name = "getrandom" 969 | version = "0.3.1" 970 | source = "registry+https://github.com/rust-lang/crates.io-index" 971 | checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" 972 | dependencies = [ 973 | "cfg-if", 974 | "libc", 975 | "wasi 0.13.3+wasi-0.2.2", 976 | "windows-targets", 977 | ] 978 | 979 | [[package]] 980 | name = "ghash" 981 | version = "0.5.1" 982 | source = "registry+https://github.com/rust-lang/crates.io-index" 983 | checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" 984 | dependencies = [ 985 | "opaque-debug", 986 | "polyval", 987 | ] 988 | 989 | [[package]] 990 | name = "gimli" 991 | version = "0.31.1" 992 | source = "registry+https://github.com/rust-lang/crates.io-index" 993 | checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" 994 | 995 | [[package]] 996 | name = "glob" 997 | version = "0.3.2" 998 | source = "registry+https://github.com/rust-lang/crates.io-index" 999 | checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" 1000 | 1001 | [[package]] 1002 | name = "hashbrown" 1003 | version = "0.12.3" 1004 | source = "registry+https://github.com/rust-lang/crates.io-index" 1005 | checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" 1006 | dependencies = [ 1007 | "ahash 0.7.8", 1008 | ] 1009 | 1010 | [[package]] 1011 | name = "hashbrown" 1012 | version = "0.14.5" 1013 | source = "registry+https://github.com/rust-lang/crates.io-index" 1014 | checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" 1015 | 1016 | [[package]] 1017 | name = "hashbrown" 1018 | version = "0.15.2" 1019 | source = "registry+https://github.com/rust-lang/crates.io-index" 1020 | checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" 1021 | 1022 | [[package]] 1023 | name = "heck" 1024 | version = "0.5.0" 1025 | source = "registry+https://github.com/rust-lang/crates.io-index" 1026 | checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 1027 | 1028 | [[package]] 1029 | name = "hex" 1030 | version = "0.4.3" 1031 | source = "registry+https://github.com/rust-lang/crates.io-index" 1032 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 1033 | 1034 | [[package]] 1035 | name = "home" 1036 | version = "0.5.11" 1037 | source = "registry+https://github.com/rust-lang/crates.io-index" 1038 | checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" 1039 | dependencies = [ 1040 | "windows-sys 0.59.0", 1041 | ] 1042 | 1043 | [[package]] 1044 | name = "http" 1045 | version = "1.2.0" 1046 | source = "registry+https://github.com/rust-lang/crates.io-index" 1047 | checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" 1048 | dependencies = [ 1049 | "bytes", 1050 | "fnv", 1051 | "itoa", 1052 | ] 1053 | 1054 | [[package]] 1055 | name = "http-body" 1056 | version = "1.0.1" 1057 | source = "registry+https://github.com/rust-lang/crates.io-index" 1058 | checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" 1059 | dependencies = [ 1060 | "bytes", 1061 | "http", 1062 | ] 1063 | 1064 | [[package]] 1065 | name = "http-body-util" 1066 | version = "0.1.2" 1067 | source = "registry+https://github.com/rust-lang/crates.io-index" 1068 | checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" 1069 | dependencies = [ 1070 | "bytes", 1071 | "futures-util", 1072 | "http", 1073 | "http-body", 1074 | "pin-project-lite", 1075 | ] 1076 | 1077 | [[package]] 1078 | name = "httparse" 1079 | version = "1.10.0" 1080 | source = "registry+https://github.com/rust-lang/crates.io-index" 1081 | checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" 1082 | 1083 | [[package]] 1084 | name = "humantime" 1085 | version = "2.1.0" 1086 | source = "registry+https://github.com/rust-lang/crates.io-index" 1087 | checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" 1088 | 1089 | [[package]] 1090 | name = "hyper" 1091 | version = "1.6.0" 1092 | source = "registry+https://github.com/rust-lang/crates.io-index" 1093 | checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" 1094 | dependencies = [ 1095 | "bytes", 1096 | "futures-channel", 1097 | "futures-util", 1098 | "http", 1099 | "http-body", 1100 | "httparse", 1101 | "itoa", 1102 | "pin-project-lite", 1103 | "smallvec", 1104 | "tokio", 1105 | "want", 1106 | ] 1107 | 1108 | [[package]] 1109 | name = "hyper-rustls" 1110 | version = "0.27.5" 1111 | source = "registry+https://github.com/rust-lang/crates.io-index" 1112 | checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" 1113 | dependencies = [ 1114 | "futures-util", 1115 | "http", 1116 | "hyper", 1117 | "hyper-util", 1118 | "rustls", 1119 | "rustls-pki-types", 1120 | "tokio", 1121 | "tokio-rustls", 1122 | "tower-service", 1123 | "webpki-roots", 1124 | ] 1125 | 1126 | [[package]] 1127 | name = "hyper-util" 1128 | version = "0.1.10" 1129 | source = "registry+https://github.com/rust-lang/crates.io-index" 1130 | checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" 1131 | dependencies = [ 1132 | "bytes", 1133 | "futures-channel", 1134 | "futures-util", 1135 | "http", 1136 | "http-body", 1137 | "hyper", 1138 | "pin-project-lite", 1139 | "socket2", 1140 | "tokio", 1141 | "tower-service", 1142 | "tracing", 1143 | ] 1144 | 1145 | [[package]] 1146 | name = "iana-time-zone" 1147 | version = "0.1.61" 1148 | source = "registry+https://github.com/rust-lang/crates.io-index" 1149 | checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" 1150 | dependencies = [ 1151 | "android_system_properties", 1152 | "core-foundation-sys", 1153 | "iana-time-zone-haiku", 1154 | "js-sys", 1155 | "wasm-bindgen", 1156 | "windows-core", 1157 | ] 1158 | 1159 | [[package]] 1160 | name = "iana-time-zone-haiku" 1161 | version = "0.1.2" 1162 | source = "registry+https://github.com/rust-lang/crates.io-index" 1163 | checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" 1164 | dependencies = [ 1165 | "cc", 1166 | ] 1167 | 1168 | [[package]] 1169 | name = "icu_collections" 1170 | version = "1.5.0" 1171 | source = "registry+https://github.com/rust-lang/crates.io-index" 1172 | checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" 1173 | dependencies = [ 1174 | "displaydoc", 1175 | "yoke", 1176 | "zerofrom", 1177 | "zerovec", 1178 | ] 1179 | 1180 | [[package]] 1181 | name = "icu_locid" 1182 | version = "1.5.0" 1183 | source = "registry+https://github.com/rust-lang/crates.io-index" 1184 | checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" 1185 | dependencies = [ 1186 | "displaydoc", 1187 | "litemap", 1188 | "tinystr", 1189 | "writeable", 1190 | "zerovec", 1191 | ] 1192 | 1193 | [[package]] 1194 | name = "icu_locid_transform" 1195 | version = "1.5.0" 1196 | source = "registry+https://github.com/rust-lang/crates.io-index" 1197 | checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" 1198 | dependencies = [ 1199 | "displaydoc", 1200 | "icu_locid", 1201 | "icu_locid_transform_data", 1202 | "icu_provider", 1203 | "tinystr", 1204 | "zerovec", 1205 | ] 1206 | 1207 | [[package]] 1208 | name = "icu_locid_transform_data" 1209 | version = "1.5.0" 1210 | source = "registry+https://github.com/rust-lang/crates.io-index" 1211 | checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" 1212 | 1213 | [[package]] 1214 | name = "icu_normalizer" 1215 | version = "1.5.0" 1216 | source = "registry+https://github.com/rust-lang/crates.io-index" 1217 | checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" 1218 | dependencies = [ 1219 | "displaydoc", 1220 | "icu_collections", 1221 | "icu_normalizer_data", 1222 | "icu_properties", 1223 | "icu_provider", 1224 | "smallvec", 1225 | "utf16_iter", 1226 | "utf8_iter", 1227 | "write16", 1228 | "zerovec", 1229 | ] 1230 | 1231 | [[package]] 1232 | name = "icu_normalizer_data" 1233 | version = "1.5.0" 1234 | source = "registry+https://github.com/rust-lang/crates.io-index" 1235 | checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" 1236 | 1237 | [[package]] 1238 | name = "icu_properties" 1239 | version = "1.5.1" 1240 | source = "registry+https://github.com/rust-lang/crates.io-index" 1241 | checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" 1242 | dependencies = [ 1243 | "displaydoc", 1244 | "icu_collections", 1245 | "icu_locid_transform", 1246 | "icu_properties_data", 1247 | "icu_provider", 1248 | "tinystr", 1249 | "zerovec", 1250 | ] 1251 | 1252 | [[package]] 1253 | name = "icu_properties_data" 1254 | version = "1.5.0" 1255 | source = "registry+https://github.com/rust-lang/crates.io-index" 1256 | checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" 1257 | 1258 | [[package]] 1259 | name = "icu_provider" 1260 | version = "1.5.0" 1261 | source = "registry+https://github.com/rust-lang/crates.io-index" 1262 | checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" 1263 | dependencies = [ 1264 | "displaydoc", 1265 | "icu_locid", 1266 | "icu_provider_macros", 1267 | "stable_deref_trait", 1268 | "tinystr", 1269 | "writeable", 1270 | "yoke", 1271 | "zerofrom", 1272 | "zerovec", 1273 | ] 1274 | 1275 | [[package]] 1276 | name = "icu_provider_macros" 1277 | version = "1.5.0" 1278 | source = "registry+https://github.com/rust-lang/crates.io-index" 1279 | checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" 1280 | dependencies = [ 1281 | "proc-macro2", 1282 | "quote", 1283 | "syn 2.0.98", 1284 | ] 1285 | 1286 | [[package]] 1287 | name = "ident_case" 1288 | version = "1.0.1" 1289 | source = "registry+https://github.com/rust-lang/crates.io-index" 1290 | checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" 1291 | 1292 | [[package]] 1293 | name = "idna" 1294 | version = "1.0.3" 1295 | source = "registry+https://github.com/rust-lang/crates.io-index" 1296 | checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" 1297 | dependencies = [ 1298 | "idna_adapter", 1299 | "smallvec", 1300 | "utf8_iter", 1301 | ] 1302 | 1303 | [[package]] 1304 | name = "idna_adapter" 1305 | version = "1.2.0" 1306 | source = "registry+https://github.com/rust-lang/crates.io-index" 1307 | checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" 1308 | dependencies = [ 1309 | "icu_normalizer", 1310 | "icu_properties", 1311 | ] 1312 | 1313 | [[package]] 1314 | name = "iggy" 1315 | version = "0.6.202" 1316 | source = "registry+https://github.com/rust-lang/crates.io-index" 1317 | checksum = "2f8fda15aebeadbabb91d52244f49ce7ceb078c9d44cf5847ed5f7760dd3992a" 1318 | dependencies = [ 1319 | "aes-gcm", 1320 | "ahash 0.8.11", 1321 | "anyhow", 1322 | "async-broadcast", 1323 | "async-dropper", 1324 | "async-trait", 1325 | "base64", 1326 | "bon", 1327 | "byte-unit", 1328 | "bytes", 1329 | "chrono", 1330 | "clap", 1331 | "convert_case", 1332 | "crc32fast", 1333 | "dashmap", 1334 | "derive_more", 1335 | "dirs", 1336 | "flume", 1337 | "futures", 1338 | "futures-util", 1339 | "humantime", 1340 | "quinn", 1341 | "reqwest", 1342 | "reqwest-middleware", 1343 | "reqwest-retry", 1344 | "rustls", 1345 | "serde", 1346 | "serde_derive", 1347 | "serde_json", 1348 | "serde_with", 1349 | "strum", 1350 | "thiserror 2.0.11", 1351 | "tokio", 1352 | "tokio-rustls", 1353 | "toml", 1354 | "tracing", 1355 | "trait-variant", 1356 | "uuid", 1357 | "webpki-roots", 1358 | ] 1359 | 1360 | [[package]] 1361 | name = "iggy-py" 1362 | version = "0.4.0" 1363 | dependencies = [ 1364 | "iggy", 1365 | "pyo3", 1366 | "pyo3-async-runtimes", 1367 | "pyo3-stub-gen", 1368 | ] 1369 | 1370 | [[package]] 1371 | name = "indexmap" 1372 | version = "1.9.3" 1373 | source = "registry+https://github.com/rust-lang/crates.io-index" 1374 | checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" 1375 | dependencies = [ 1376 | "autocfg", 1377 | "hashbrown 0.12.3", 1378 | "serde", 1379 | ] 1380 | 1381 | [[package]] 1382 | name = "indexmap" 1383 | version = "2.7.1" 1384 | source = "registry+https://github.com/rust-lang/crates.io-index" 1385 | checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" 1386 | dependencies = [ 1387 | "equivalent", 1388 | "hashbrown 0.15.2", 1389 | "serde", 1390 | ] 1391 | 1392 | [[package]] 1393 | name = "indoc" 1394 | version = "2.0.5" 1395 | source = "registry+https://github.com/rust-lang/crates.io-index" 1396 | checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" 1397 | 1398 | [[package]] 1399 | name = "inout" 1400 | version = "0.1.3" 1401 | source = "registry+https://github.com/rust-lang/crates.io-index" 1402 | checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" 1403 | dependencies = [ 1404 | "generic-array", 1405 | ] 1406 | 1407 | [[package]] 1408 | name = "instant" 1409 | version = "0.1.13" 1410 | source = "registry+https://github.com/rust-lang/crates.io-index" 1411 | checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" 1412 | dependencies = [ 1413 | "cfg-if", 1414 | "js-sys", 1415 | "wasm-bindgen", 1416 | "web-sys", 1417 | ] 1418 | 1419 | [[package]] 1420 | name = "inventory" 1421 | version = "0.3.19" 1422 | source = "registry+https://github.com/rust-lang/crates.io-index" 1423 | checksum = "54b12ebb6799019b044deaf431eadfe23245b259bba5a2c0796acec3943a3cdb" 1424 | dependencies = [ 1425 | "rustversion", 1426 | ] 1427 | 1428 | [[package]] 1429 | name = "ipnet" 1430 | version = "2.11.0" 1431 | source = "registry+https://github.com/rust-lang/crates.io-index" 1432 | checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" 1433 | 1434 | [[package]] 1435 | name = "is_terminal_polyfill" 1436 | version = "1.70.1" 1437 | source = "registry+https://github.com/rust-lang/crates.io-index" 1438 | checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" 1439 | 1440 | [[package]] 1441 | name = "itertools" 1442 | version = "0.12.1" 1443 | source = "registry+https://github.com/rust-lang/crates.io-index" 1444 | checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" 1445 | dependencies = [ 1446 | "either", 1447 | ] 1448 | 1449 | [[package]] 1450 | name = "itertools" 1451 | version = "0.13.0" 1452 | source = "registry+https://github.com/rust-lang/crates.io-index" 1453 | checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" 1454 | dependencies = [ 1455 | "either", 1456 | ] 1457 | 1458 | [[package]] 1459 | name = "itoa" 1460 | version = "1.0.14" 1461 | source = "registry+https://github.com/rust-lang/crates.io-index" 1462 | checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" 1463 | 1464 | [[package]] 1465 | name = "jni" 1466 | version = "0.19.0" 1467 | source = "registry+https://github.com/rust-lang/crates.io-index" 1468 | checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" 1469 | dependencies = [ 1470 | "cesu8", 1471 | "combine", 1472 | "jni-sys", 1473 | "log", 1474 | "thiserror 1.0.69", 1475 | "walkdir", 1476 | ] 1477 | 1478 | [[package]] 1479 | name = "jni-sys" 1480 | version = "0.3.0" 1481 | source = "registry+https://github.com/rust-lang/crates.io-index" 1482 | checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" 1483 | 1484 | [[package]] 1485 | name = "jobserver" 1486 | version = "0.1.32" 1487 | source = "registry+https://github.com/rust-lang/crates.io-index" 1488 | checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" 1489 | dependencies = [ 1490 | "libc", 1491 | ] 1492 | 1493 | [[package]] 1494 | name = "js-sys" 1495 | version = "0.3.77" 1496 | source = "registry+https://github.com/rust-lang/crates.io-index" 1497 | checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" 1498 | dependencies = [ 1499 | "once_cell", 1500 | "wasm-bindgen", 1501 | ] 1502 | 1503 | [[package]] 1504 | name = "lazy_static" 1505 | version = "1.5.0" 1506 | source = "registry+https://github.com/rust-lang/crates.io-index" 1507 | checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 1508 | 1509 | [[package]] 1510 | name = "lazycell" 1511 | version = "1.3.0" 1512 | source = "registry+https://github.com/rust-lang/crates.io-index" 1513 | checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" 1514 | 1515 | [[package]] 1516 | name = "libc" 1517 | version = "0.2.169" 1518 | source = "registry+https://github.com/rust-lang/crates.io-index" 1519 | checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" 1520 | 1521 | [[package]] 1522 | name = "libloading" 1523 | version = "0.8.6" 1524 | source = "registry+https://github.com/rust-lang/crates.io-index" 1525 | checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" 1526 | dependencies = [ 1527 | "cfg-if", 1528 | "windows-targets", 1529 | ] 1530 | 1531 | [[package]] 1532 | name = "libredox" 1533 | version = "0.1.3" 1534 | source = "registry+https://github.com/rust-lang/crates.io-index" 1535 | checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" 1536 | dependencies = [ 1537 | "bitflags 2.8.0", 1538 | "libc", 1539 | ] 1540 | 1541 | [[package]] 1542 | name = "linux-raw-sys" 1543 | version = "0.4.15" 1544 | source = "registry+https://github.com/rust-lang/crates.io-index" 1545 | checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" 1546 | 1547 | [[package]] 1548 | name = "litemap" 1549 | version = "0.7.4" 1550 | source = "registry+https://github.com/rust-lang/crates.io-index" 1551 | checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" 1552 | 1553 | [[package]] 1554 | name = "lock_api" 1555 | version = "0.4.12" 1556 | source = "registry+https://github.com/rust-lang/crates.io-index" 1557 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 1558 | dependencies = [ 1559 | "autocfg", 1560 | "scopeguard", 1561 | ] 1562 | 1563 | [[package]] 1564 | name = "log" 1565 | version = "0.4.25" 1566 | source = "registry+https://github.com/rust-lang/crates.io-index" 1567 | checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" 1568 | 1569 | [[package]] 1570 | name = "maplit" 1571 | version = "1.0.2" 1572 | source = "registry+https://github.com/rust-lang/crates.io-index" 1573 | checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" 1574 | 1575 | [[package]] 1576 | name = "matrixmultiply" 1577 | version = "0.3.9" 1578 | source = "registry+https://github.com/rust-lang/crates.io-index" 1579 | checksum = "9380b911e3e96d10c1f415da0876389aaf1b56759054eeb0de7df940c456ba1a" 1580 | dependencies = [ 1581 | "autocfg", 1582 | "rawpointer", 1583 | ] 1584 | 1585 | [[package]] 1586 | name = "memchr" 1587 | version = "2.7.4" 1588 | source = "registry+https://github.com/rust-lang/crates.io-index" 1589 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 1590 | 1591 | [[package]] 1592 | name = "memoffset" 1593 | version = "0.9.1" 1594 | source = "registry+https://github.com/rust-lang/crates.io-index" 1595 | checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" 1596 | dependencies = [ 1597 | "autocfg", 1598 | ] 1599 | 1600 | [[package]] 1601 | name = "mime" 1602 | version = "0.3.17" 1603 | source = "registry+https://github.com/rust-lang/crates.io-index" 1604 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 1605 | 1606 | [[package]] 1607 | name = "minimal-lexical" 1608 | version = "0.2.1" 1609 | source = "registry+https://github.com/rust-lang/crates.io-index" 1610 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 1611 | 1612 | [[package]] 1613 | name = "miniz_oxide" 1614 | version = "0.8.4" 1615 | source = "registry+https://github.com/rust-lang/crates.io-index" 1616 | checksum = "b3b1c9bd4fe1f0f8b387f6eb9eb3b4a1aa26185e5750efb9140301703f62cd1b" 1617 | dependencies = [ 1618 | "adler2", 1619 | ] 1620 | 1621 | [[package]] 1622 | name = "mio" 1623 | version = "1.0.3" 1624 | source = "registry+https://github.com/rust-lang/crates.io-index" 1625 | checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" 1626 | dependencies = [ 1627 | "libc", 1628 | "wasi 0.11.0+wasi-snapshot-preview1", 1629 | "windows-sys 0.52.0", 1630 | ] 1631 | 1632 | [[package]] 1633 | name = "nanorand" 1634 | version = "0.7.0" 1635 | source = "registry+https://github.com/rust-lang/crates.io-index" 1636 | checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" 1637 | dependencies = [ 1638 | "getrandom 0.2.15", 1639 | ] 1640 | 1641 | [[package]] 1642 | name = "ndarray" 1643 | version = "0.16.1" 1644 | source = "registry+https://github.com/rust-lang/crates.io-index" 1645 | checksum = "882ed72dce9365842bf196bdeedf5055305f11fc8c03dee7bb0194a6cad34841" 1646 | dependencies = [ 1647 | "matrixmultiply", 1648 | "num-complex", 1649 | "num-integer", 1650 | "num-traits", 1651 | "portable-atomic", 1652 | "portable-atomic-util", 1653 | "rawpointer", 1654 | ] 1655 | 1656 | [[package]] 1657 | name = "nom" 1658 | version = "7.1.3" 1659 | source = "registry+https://github.com/rust-lang/crates.io-index" 1660 | checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 1661 | dependencies = [ 1662 | "memchr", 1663 | "minimal-lexical", 1664 | ] 1665 | 1666 | [[package]] 1667 | name = "num-bigint" 1668 | version = "0.4.6" 1669 | source = "registry+https://github.com/rust-lang/crates.io-index" 1670 | checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" 1671 | dependencies = [ 1672 | "num-integer", 1673 | "num-traits", 1674 | ] 1675 | 1676 | [[package]] 1677 | name = "num-complex" 1678 | version = "0.4.6" 1679 | source = "registry+https://github.com/rust-lang/crates.io-index" 1680 | checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" 1681 | dependencies = [ 1682 | "num-traits", 1683 | ] 1684 | 1685 | [[package]] 1686 | name = "num-conv" 1687 | version = "0.1.0" 1688 | source = "registry+https://github.com/rust-lang/crates.io-index" 1689 | checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" 1690 | 1691 | [[package]] 1692 | name = "num-integer" 1693 | version = "0.1.46" 1694 | source = "registry+https://github.com/rust-lang/crates.io-index" 1695 | checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" 1696 | dependencies = [ 1697 | "num-traits", 1698 | ] 1699 | 1700 | [[package]] 1701 | name = "num-traits" 1702 | version = "0.2.19" 1703 | source = "registry+https://github.com/rust-lang/crates.io-index" 1704 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 1705 | dependencies = [ 1706 | "autocfg", 1707 | ] 1708 | 1709 | [[package]] 1710 | name = "numpy" 1711 | version = "0.22.1" 1712 | source = "registry+https://github.com/rust-lang/crates.io-index" 1713 | checksum = "edb929bc0da91a4d85ed6c0a84deaa53d411abfb387fc271124f91bf6b89f14e" 1714 | dependencies = [ 1715 | "libc", 1716 | "ndarray", 1717 | "num-complex", 1718 | "num-integer", 1719 | "num-traits", 1720 | "pyo3", 1721 | "rustc-hash 1.1.0", 1722 | ] 1723 | 1724 | [[package]] 1725 | name = "object" 1726 | version = "0.36.7" 1727 | source = "registry+https://github.com/rust-lang/crates.io-index" 1728 | checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" 1729 | dependencies = [ 1730 | "memchr", 1731 | ] 1732 | 1733 | [[package]] 1734 | name = "once_cell" 1735 | version = "1.20.3" 1736 | source = "registry+https://github.com/rust-lang/crates.io-index" 1737 | checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" 1738 | 1739 | [[package]] 1740 | name = "opaque-debug" 1741 | version = "0.3.1" 1742 | source = "registry+https://github.com/rust-lang/crates.io-index" 1743 | checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" 1744 | 1745 | [[package]] 1746 | name = "openssl-probe" 1747 | version = "0.1.6" 1748 | source = "registry+https://github.com/rust-lang/crates.io-index" 1749 | checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" 1750 | 1751 | [[package]] 1752 | name = "option-ext" 1753 | version = "0.2.0" 1754 | source = "registry+https://github.com/rust-lang/crates.io-index" 1755 | checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" 1756 | 1757 | [[package]] 1758 | name = "parking" 1759 | version = "2.2.1" 1760 | source = "registry+https://github.com/rust-lang/crates.io-index" 1761 | checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" 1762 | 1763 | [[package]] 1764 | name = "parking_lot" 1765 | version = "0.11.2" 1766 | source = "registry+https://github.com/rust-lang/crates.io-index" 1767 | checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" 1768 | dependencies = [ 1769 | "instant", 1770 | "lock_api", 1771 | "parking_lot_core 0.8.6", 1772 | ] 1773 | 1774 | [[package]] 1775 | name = "parking_lot" 1776 | version = "0.12.3" 1777 | source = "registry+https://github.com/rust-lang/crates.io-index" 1778 | checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" 1779 | dependencies = [ 1780 | "lock_api", 1781 | "parking_lot_core 0.9.10", 1782 | ] 1783 | 1784 | [[package]] 1785 | name = "parking_lot_core" 1786 | version = "0.8.6" 1787 | source = "registry+https://github.com/rust-lang/crates.io-index" 1788 | checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" 1789 | dependencies = [ 1790 | "cfg-if", 1791 | "instant", 1792 | "libc", 1793 | "redox_syscall 0.2.16", 1794 | "smallvec", 1795 | "winapi", 1796 | ] 1797 | 1798 | [[package]] 1799 | name = "parking_lot_core" 1800 | version = "0.9.10" 1801 | source = "registry+https://github.com/rust-lang/crates.io-index" 1802 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 1803 | dependencies = [ 1804 | "cfg-if", 1805 | "libc", 1806 | "redox_syscall 0.5.8", 1807 | "smallvec", 1808 | "windows-targets", 1809 | ] 1810 | 1811 | [[package]] 1812 | name = "paste" 1813 | version = "1.0.15" 1814 | source = "registry+https://github.com/rust-lang/crates.io-index" 1815 | checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" 1816 | 1817 | [[package]] 1818 | name = "percent-encoding" 1819 | version = "2.3.1" 1820 | source = "registry+https://github.com/rust-lang/crates.io-index" 1821 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 1822 | 1823 | [[package]] 1824 | name = "pin-project" 1825 | version = "1.1.9" 1826 | source = "registry+https://github.com/rust-lang/crates.io-index" 1827 | checksum = "dfe2e71e1471fe07709406bf725f710b02927c9c54b2b5b2ec0e8087d97c327d" 1828 | dependencies = [ 1829 | "pin-project-internal", 1830 | ] 1831 | 1832 | [[package]] 1833 | name = "pin-project-internal" 1834 | version = "1.1.9" 1835 | source = "registry+https://github.com/rust-lang/crates.io-index" 1836 | checksum = "f6e859e6e5bd50440ab63c47e3ebabc90f26251f7c73c3d3e837b74a1cc3fa67" 1837 | dependencies = [ 1838 | "proc-macro2", 1839 | "quote", 1840 | "syn 2.0.98", 1841 | ] 1842 | 1843 | [[package]] 1844 | name = "pin-project-lite" 1845 | version = "0.2.16" 1846 | source = "registry+https://github.com/rust-lang/crates.io-index" 1847 | checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" 1848 | 1849 | [[package]] 1850 | name = "pin-utils" 1851 | version = "0.1.0" 1852 | source = "registry+https://github.com/rust-lang/crates.io-index" 1853 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1854 | 1855 | [[package]] 1856 | name = "polyval" 1857 | version = "0.6.2" 1858 | source = "registry+https://github.com/rust-lang/crates.io-index" 1859 | checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" 1860 | dependencies = [ 1861 | "cfg-if", 1862 | "cpufeatures", 1863 | "opaque-debug", 1864 | "universal-hash", 1865 | ] 1866 | 1867 | [[package]] 1868 | name = "portable-atomic" 1869 | version = "1.10.0" 1870 | source = "registry+https://github.com/rust-lang/crates.io-index" 1871 | checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" 1872 | 1873 | [[package]] 1874 | name = "portable-atomic-util" 1875 | version = "0.2.4" 1876 | source = "registry+https://github.com/rust-lang/crates.io-index" 1877 | checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" 1878 | dependencies = [ 1879 | "portable-atomic", 1880 | ] 1881 | 1882 | [[package]] 1883 | name = "powerfmt" 1884 | version = "0.2.0" 1885 | source = "registry+https://github.com/rust-lang/crates.io-index" 1886 | checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" 1887 | 1888 | [[package]] 1889 | name = "ppv-lite86" 1890 | version = "0.2.20" 1891 | source = "registry+https://github.com/rust-lang/crates.io-index" 1892 | checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" 1893 | dependencies = [ 1894 | "zerocopy 0.7.35", 1895 | ] 1896 | 1897 | [[package]] 1898 | name = "prettyplease" 1899 | version = "0.2.29" 1900 | source = "registry+https://github.com/rust-lang/crates.io-index" 1901 | checksum = "6924ced06e1f7dfe3fa48d57b9f74f55d8915f5036121bef647ef4b204895fac" 1902 | dependencies = [ 1903 | "proc-macro2", 1904 | "syn 2.0.98", 1905 | ] 1906 | 1907 | [[package]] 1908 | name = "proc-macro-crate" 1909 | version = "3.2.0" 1910 | source = "registry+https://github.com/rust-lang/crates.io-index" 1911 | checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" 1912 | dependencies = [ 1913 | "toml_edit", 1914 | ] 1915 | 1916 | [[package]] 1917 | name = "proc-macro2" 1918 | version = "1.0.93" 1919 | source = "registry+https://github.com/rust-lang/crates.io-index" 1920 | checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" 1921 | dependencies = [ 1922 | "unicode-ident", 1923 | ] 1924 | 1925 | [[package]] 1926 | name = "ptr_meta" 1927 | version = "0.1.4" 1928 | source = "registry+https://github.com/rust-lang/crates.io-index" 1929 | checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" 1930 | dependencies = [ 1931 | "ptr_meta_derive", 1932 | ] 1933 | 1934 | [[package]] 1935 | name = "ptr_meta_derive" 1936 | version = "0.1.4" 1937 | source = "registry+https://github.com/rust-lang/crates.io-index" 1938 | checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" 1939 | dependencies = [ 1940 | "proc-macro2", 1941 | "quote", 1942 | "syn 1.0.109", 1943 | ] 1944 | 1945 | [[package]] 1946 | name = "pyo3" 1947 | version = "0.22.6" 1948 | source = "registry+https://github.com/rust-lang/crates.io-index" 1949 | checksum = "f402062616ab18202ae8319da13fa4279883a2b8a9d9f83f20dbade813ce1884" 1950 | dependencies = [ 1951 | "cfg-if", 1952 | "indoc", 1953 | "libc", 1954 | "memoffset", 1955 | "once_cell", 1956 | "portable-atomic", 1957 | "pyo3-build-config", 1958 | "pyo3-ffi", 1959 | "pyo3-macros", 1960 | "unindent", 1961 | ] 1962 | 1963 | [[package]] 1964 | name = "pyo3-async-runtimes" 1965 | version = "0.22.0" 1966 | source = "registry+https://github.com/rust-lang/crates.io-index" 1967 | checksum = "2529f0be73ffd2be0cc43c013a640796558aa12d7ca0aab5cc14f375b4733031" 1968 | dependencies = [ 1969 | "futures", 1970 | "once_cell", 1971 | "pin-project-lite", 1972 | "pyo3", 1973 | "pyo3-async-runtimes-macros", 1974 | "tokio", 1975 | ] 1976 | 1977 | [[package]] 1978 | name = "pyo3-async-runtimes-macros" 1979 | version = "0.22.0" 1980 | source = "registry+https://github.com/rust-lang/crates.io-index" 1981 | checksum = "22c26fd8e9fc19f53f0c1e00bf61471de6789f7eb263056f7f944a9cceb5823e" 1982 | dependencies = [ 1983 | "proc-macro2", 1984 | "quote", 1985 | "syn 2.0.98", 1986 | ] 1987 | 1988 | [[package]] 1989 | name = "pyo3-build-config" 1990 | version = "0.22.6" 1991 | source = "registry+https://github.com/rust-lang/crates.io-index" 1992 | checksum = "b14b5775b5ff446dd1056212d778012cbe8a0fbffd368029fd9e25b514479c38" 1993 | dependencies = [ 1994 | "once_cell", 1995 | "target-lexicon", 1996 | ] 1997 | 1998 | [[package]] 1999 | name = "pyo3-ffi" 2000 | version = "0.22.6" 2001 | source = "registry+https://github.com/rust-lang/crates.io-index" 2002 | checksum = "9ab5bcf04a2cdcbb50c7d6105de943f543f9ed92af55818fd17b660390fc8636" 2003 | dependencies = [ 2004 | "libc", 2005 | "pyo3-build-config", 2006 | ] 2007 | 2008 | [[package]] 2009 | name = "pyo3-macros" 2010 | version = "0.22.6" 2011 | source = "registry+https://github.com/rust-lang/crates.io-index" 2012 | checksum = "0fd24d897903a9e6d80b968368a34e1525aeb719d568dba8b3d4bfa5dc67d453" 2013 | dependencies = [ 2014 | "proc-macro2", 2015 | "pyo3-macros-backend", 2016 | "quote", 2017 | "syn 2.0.98", 2018 | ] 2019 | 2020 | [[package]] 2021 | name = "pyo3-macros-backend" 2022 | version = "0.22.6" 2023 | source = "registry+https://github.com/rust-lang/crates.io-index" 2024 | checksum = "36c011a03ba1e50152b4b394b479826cad97e7a21eb52df179cd91ac411cbfbe" 2025 | dependencies = [ 2026 | "heck", 2027 | "proc-macro2", 2028 | "pyo3-build-config", 2029 | "quote", 2030 | "syn 2.0.98", 2031 | ] 2032 | 2033 | [[package]] 2034 | name = "pyo3-stub-gen" 2035 | version = "0.7.0" 2036 | source = "registry+https://github.com/rust-lang/crates.io-index" 2037 | checksum = "ca7c2d6e22cba51cc9766b6dee4087218cc445fdf99db62fa4f269e074351b46" 2038 | dependencies = [ 2039 | "anyhow", 2040 | "chrono", 2041 | "inventory", 2042 | "itertools 0.13.0", 2043 | "log", 2044 | "maplit", 2045 | "num-complex", 2046 | "numpy", 2047 | "pyo3", 2048 | "pyo3-stub-gen-derive", 2049 | "serde", 2050 | "toml", 2051 | ] 2052 | 2053 | [[package]] 2054 | name = "pyo3-stub-gen-derive" 2055 | version = "0.7.0" 2056 | source = "registry+https://github.com/rust-lang/crates.io-index" 2057 | checksum = "3ee49d727163163a0c6fc3fee4636c8b5c82e1bb868e85cf411be7ae9e4e5b40" 2058 | dependencies = [ 2059 | "proc-macro2", 2060 | "quote", 2061 | "syn 2.0.98", 2062 | ] 2063 | 2064 | [[package]] 2065 | name = "quinn" 2066 | version = "0.11.6" 2067 | source = "registry+https://github.com/rust-lang/crates.io-index" 2068 | checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" 2069 | dependencies = [ 2070 | "bytes", 2071 | "pin-project-lite", 2072 | "quinn-proto", 2073 | "quinn-udp", 2074 | "rustc-hash 2.1.1", 2075 | "rustls", 2076 | "socket2", 2077 | "thiserror 2.0.11", 2078 | "tokio", 2079 | "tracing", 2080 | ] 2081 | 2082 | [[package]] 2083 | name = "quinn-proto" 2084 | version = "0.11.9" 2085 | source = "registry+https://github.com/rust-lang/crates.io-index" 2086 | checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" 2087 | dependencies = [ 2088 | "bytes", 2089 | "getrandom 0.2.15", 2090 | "rand 0.8.5", 2091 | "ring", 2092 | "rustc-hash 2.1.1", 2093 | "rustls", 2094 | "rustls-pki-types", 2095 | "rustls-platform-verifier", 2096 | "slab", 2097 | "thiserror 2.0.11", 2098 | "tinyvec", 2099 | "tracing", 2100 | "web-time", 2101 | ] 2102 | 2103 | [[package]] 2104 | name = "quinn-udp" 2105 | version = "0.5.10" 2106 | source = "registry+https://github.com/rust-lang/crates.io-index" 2107 | checksum = "e46f3055866785f6b92bc6164b76be02ca8f2eb4b002c0354b28cf4c119e5944" 2108 | dependencies = [ 2109 | "cfg_aliases", 2110 | "libc", 2111 | "once_cell", 2112 | "socket2", 2113 | "tracing", 2114 | "windows-sys 0.59.0", 2115 | ] 2116 | 2117 | [[package]] 2118 | name = "quote" 2119 | version = "1.0.38" 2120 | source = "registry+https://github.com/rust-lang/crates.io-index" 2121 | checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" 2122 | dependencies = [ 2123 | "proc-macro2", 2124 | ] 2125 | 2126 | [[package]] 2127 | name = "radium" 2128 | version = "0.7.0" 2129 | source = "registry+https://github.com/rust-lang/crates.io-index" 2130 | checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" 2131 | 2132 | [[package]] 2133 | name = "rand" 2134 | version = "0.8.5" 2135 | source = "registry+https://github.com/rust-lang/crates.io-index" 2136 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 2137 | dependencies = [ 2138 | "libc", 2139 | "rand_chacha 0.3.1", 2140 | "rand_core 0.6.4", 2141 | ] 2142 | 2143 | [[package]] 2144 | name = "rand" 2145 | version = "0.9.0" 2146 | source = "registry+https://github.com/rust-lang/crates.io-index" 2147 | checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" 2148 | dependencies = [ 2149 | "rand_chacha 0.9.0", 2150 | "rand_core 0.9.1", 2151 | "zerocopy 0.8.20", 2152 | ] 2153 | 2154 | [[package]] 2155 | name = "rand_chacha" 2156 | version = "0.3.1" 2157 | source = "registry+https://github.com/rust-lang/crates.io-index" 2158 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 2159 | dependencies = [ 2160 | "ppv-lite86", 2161 | "rand_core 0.6.4", 2162 | ] 2163 | 2164 | [[package]] 2165 | name = "rand_chacha" 2166 | version = "0.9.0" 2167 | source = "registry+https://github.com/rust-lang/crates.io-index" 2168 | checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" 2169 | dependencies = [ 2170 | "ppv-lite86", 2171 | "rand_core 0.9.1", 2172 | ] 2173 | 2174 | [[package]] 2175 | name = "rand_core" 2176 | version = "0.6.4" 2177 | source = "registry+https://github.com/rust-lang/crates.io-index" 2178 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 2179 | dependencies = [ 2180 | "getrandom 0.2.15", 2181 | ] 2182 | 2183 | [[package]] 2184 | name = "rand_core" 2185 | version = "0.9.1" 2186 | source = "registry+https://github.com/rust-lang/crates.io-index" 2187 | checksum = "a88e0da7a2c97baa202165137c158d0a2e824ac465d13d81046727b34cb247d3" 2188 | dependencies = [ 2189 | "getrandom 0.3.1", 2190 | "zerocopy 0.8.20", 2191 | ] 2192 | 2193 | [[package]] 2194 | name = "rawpointer" 2195 | version = "0.2.1" 2196 | source = "registry+https://github.com/rust-lang/crates.io-index" 2197 | checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" 2198 | 2199 | [[package]] 2200 | name = "redox_syscall" 2201 | version = "0.2.16" 2202 | source = "registry+https://github.com/rust-lang/crates.io-index" 2203 | checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" 2204 | dependencies = [ 2205 | "bitflags 1.3.2", 2206 | ] 2207 | 2208 | [[package]] 2209 | name = "redox_syscall" 2210 | version = "0.5.8" 2211 | source = "registry+https://github.com/rust-lang/crates.io-index" 2212 | checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" 2213 | dependencies = [ 2214 | "bitflags 2.8.0", 2215 | ] 2216 | 2217 | [[package]] 2218 | name = "redox_users" 2219 | version = "0.5.0" 2220 | source = "registry+https://github.com/rust-lang/crates.io-index" 2221 | checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b" 2222 | dependencies = [ 2223 | "getrandom 0.2.15", 2224 | "libredox", 2225 | "thiserror 2.0.11", 2226 | ] 2227 | 2228 | [[package]] 2229 | name = "regex" 2230 | version = "1.11.1" 2231 | source = "registry+https://github.com/rust-lang/crates.io-index" 2232 | checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" 2233 | dependencies = [ 2234 | "aho-corasick", 2235 | "memchr", 2236 | "regex-automata", 2237 | "regex-syntax", 2238 | ] 2239 | 2240 | [[package]] 2241 | name = "regex-automata" 2242 | version = "0.4.9" 2243 | source = "registry+https://github.com/rust-lang/crates.io-index" 2244 | checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" 2245 | dependencies = [ 2246 | "aho-corasick", 2247 | "memchr", 2248 | "regex-syntax", 2249 | ] 2250 | 2251 | [[package]] 2252 | name = "regex-syntax" 2253 | version = "0.8.5" 2254 | source = "registry+https://github.com/rust-lang/crates.io-index" 2255 | checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" 2256 | 2257 | [[package]] 2258 | name = "rend" 2259 | version = "0.4.2" 2260 | source = "registry+https://github.com/rust-lang/crates.io-index" 2261 | checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" 2262 | dependencies = [ 2263 | "bytecheck", 2264 | ] 2265 | 2266 | [[package]] 2267 | name = "reqwest" 2268 | version = "0.12.12" 2269 | source = "registry+https://github.com/rust-lang/crates.io-index" 2270 | checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" 2271 | dependencies = [ 2272 | "base64", 2273 | "bytes", 2274 | "futures-core", 2275 | "futures-util", 2276 | "http", 2277 | "http-body", 2278 | "http-body-util", 2279 | "hyper", 2280 | "hyper-rustls", 2281 | "hyper-util", 2282 | "ipnet", 2283 | "js-sys", 2284 | "log", 2285 | "mime", 2286 | "once_cell", 2287 | "percent-encoding", 2288 | "pin-project-lite", 2289 | "quinn", 2290 | "rustls", 2291 | "rustls-pemfile", 2292 | "rustls-pki-types", 2293 | "serde", 2294 | "serde_json", 2295 | "serde_urlencoded", 2296 | "sync_wrapper", 2297 | "tokio", 2298 | "tokio-rustls", 2299 | "tower", 2300 | "tower-service", 2301 | "url", 2302 | "wasm-bindgen", 2303 | "wasm-bindgen-futures", 2304 | "web-sys", 2305 | "webpki-roots", 2306 | "windows-registry", 2307 | ] 2308 | 2309 | [[package]] 2310 | name = "reqwest-middleware" 2311 | version = "0.4.0" 2312 | source = "registry+https://github.com/rust-lang/crates.io-index" 2313 | checksum = "d1ccd3b55e711f91a9885a2fa6fbbb2e39db1776420b062efc058c6410f7e5e3" 2314 | dependencies = [ 2315 | "anyhow", 2316 | "async-trait", 2317 | "http", 2318 | "reqwest", 2319 | "serde", 2320 | "thiserror 1.0.69", 2321 | "tower-service", 2322 | ] 2323 | 2324 | [[package]] 2325 | name = "reqwest-retry" 2326 | version = "0.7.0" 2327 | source = "registry+https://github.com/rust-lang/crates.io-index" 2328 | checksum = "29c73e4195a6bfbcb174b790d9b3407ab90646976c55de58a6515da25d851178" 2329 | dependencies = [ 2330 | "anyhow", 2331 | "async-trait", 2332 | "futures", 2333 | "getrandom 0.2.15", 2334 | "http", 2335 | "hyper", 2336 | "parking_lot 0.11.2", 2337 | "reqwest", 2338 | "reqwest-middleware", 2339 | "retry-policies", 2340 | "thiserror 1.0.69", 2341 | "tokio", 2342 | "tracing", 2343 | "wasm-timer", 2344 | ] 2345 | 2346 | [[package]] 2347 | name = "retry-policies" 2348 | version = "0.4.0" 2349 | source = "registry+https://github.com/rust-lang/crates.io-index" 2350 | checksum = "5875471e6cab2871bc150ecb8c727db5113c9338cc3354dc5ee3425b6aa40a1c" 2351 | dependencies = [ 2352 | "rand 0.8.5", 2353 | ] 2354 | 2355 | [[package]] 2356 | name = "ring" 2357 | version = "0.17.9" 2358 | source = "registry+https://github.com/rust-lang/crates.io-index" 2359 | checksum = "e75ec5e92c4d8aede845126adc388046234541629e76029599ed35a003c7ed24" 2360 | dependencies = [ 2361 | "cc", 2362 | "cfg-if", 2363 | "getrandom 0.2.15", 2364 | "libc", 2365 | "untrusted", 2366 | "windows-sys 0.52.0", 2367 | ] 2368 | 2369 | [[package]] 2370 | name = "rkyv" 2371 | version = "0.7.45" 2372 | source = "registry+https://github.com/rust-lang/crates.io-index" 2373 | checksum = "9008cd6385b9e161d8229e1f6549dd23c3d022f132a2ea37ac3a10ac4935779b" 2374 | dependencies = [ 2375 | "bitvec", 2376 | "bytecheck", 2377 | "bytes", 2378 | "hashbrown 0.12.3", 2379 | "ptr_meta", 2380 | "rend", 2381 | "rkyv_derive", 2382 | "seahash", 2383 | "tinyvec", 2384 | "uuid", 2385 | ] 2386 | 2387 | [[package]] 2388 | name = "rkyv_derive" 2389 | version = "0.7.45" 2390 | source = "registry+https://github.com/rust-lang/crates.io-index" 2391 | checksum = "503d1d27590a2b0a3a4ca4c94755aa2875657196ecbf401a42eff41d7de532c0" 2392 | dependencies = [ 2393 | "proc-macro2", 2394 | "quote", 2395 | "syn 1.0.109", 2396 | ] 2397 | 2398 | [[package]] 2399 | name = "rust_decimal" 2400 | version = "1.36.0" 2401 | source = "registry+https://github.com/rust-lang/crates.io-index" 2402 | checksum = "b082d80e3e3cc52b2ed634388d436fe1f4de6af5786cc2de9ba9737527bdf555" 2403 | dependencies = [ 2404 | "arrayvec", 2405 | "borsh", 2406 | "bytes", 2407 | "num-traits", 2408 | "rand 0.8.5", 2409 | "rkyv", 2410 | "serde", 2411 | "serde_json", 2412 | ] 2413 | 2414 | [[package]] 2415 | name = "rustc-demangle" 2416 | version = "0.1.24" 2417 | source = "registry+https://github.com/rust-lang/crates.io-index" 2418 | checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" 2419 | 2420 | [[package]] 2421 | name = "rustc-hash" 2422 | version = "1.1.0" 2423 | source = "registry+https://github.com/rust-lang/crates.io-index" 2424 | checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" 2425 | 2426 | [[package]] 2427 | name = "rustc-hash" 2428 | version = "2.1.1" 2429 | source = "registry+https://github.com/rust-lang/crates.io-index" 2430 | checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" 2431 | 2432 | [[package]] 2433 | name = "rustc_version" 2434 | version = "0.4.1" 2435 | source = "registry+https://github.com/rust-lang/crates.io-index" 2436 | checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" 2437 | dependencies = [ 2438 | "semver", 2439 | ] 2440 | 2441 | [[package]] 2442 | name = "rustix" 2443 | version = "0.38.44" 2444 | source = "registry+https://github.com/rust-lang/crates.io-index" 2445 | checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" 2446 | dependencies = [ 2447 | "bitflags 2.8.0", 2448 | "errno", 2449 | "libc", 2450 | "linux-raw-sys", 2451 | "windows-sys 0.59.0", 2452 | ] 2453 | 2454 | [[package]] 2455 | name = "rustls" 2456 | version = "0.23.23" 2457 | source = "registry+https://github.com/rust-lang/crates.io-index" 2458 | checksum = "47796c98c480fce5406ef69d1c76378375492c3b0a0de587be0c1d9feb12f395" 2459 | dependencies = [ 2460 | "aws-lc-rs", 2461 | "log", 2462 | "once_cell", 2463 | "ring", 2464 | "rustls-pki-types", 2465 | "rustls-webpki", 2466 | "subtle", 2467 | "zeroize", 2468 | ] 2469 | 2470 | [[package]] 2471 | name = "rustls-native-certs" 2472 | version = "0.7.3" 2473 | source = "registry+https://github.com/rust-lang/crates.io-index" 2474 | checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" 2475 | dependencies = [ 2476 | "openssl-probe", 2477 | "rustls-pemfile", 2478 | "rustls-pki-types", 2479 | "schannel", 2480 | "security-framework", 2481 | ] 2482 | 2483 | [[package]] 2484 | name = "rustls-pemfile" 2485 | version = "2.2.0" 2486 | source = "registry+https://github.com/rust-lang/crates.io-index" 2487 | checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" 2488 | dependencies = [ 2489 | "rustls-pki-types", 2490 | ] 2491 | 2492 | [[package]] 2493 | name = "rustls-pki-types" 2494 | version = "1.11.0" 2495 | source = "registry+https://github.com/rust-lang/crates.io-index" 2496 | checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" 2497 | dependencies = [ 2498 | "web-time", 2499 | ] 2500 | 2501 | [[package]] 2502 | name = "rustls-platform-verifier" 2503 | version = "0.4.0" 2504 | source = "registry+https://github.com/rust-lang/crates.io-index" 2505 | checksum = "a4c7dc240fec5517e6c4eab3310438636cfe6391dfc345ba013109909a90d136" 2506 | dependencies = [ 2507 | "core-foundation", 2508 | "core-foundation-sys", 2509 | "jni", 2510 | "log", 2511 | "once_cell", 2512 | "rustls", 2513 | "rustls-native-certs", 2514 | "rustls-platform-verifier-android", 2515 | "rustls-webpki", 2516 | "security-framework", 2517 | "security-framework-sys", 2518 | "webpki-root-certs", 2519 | "windows-sys 0.52.0", 2520 | ] 2521 | 2522 | [[package]] 2523 | name = "rustls-platform-verifier-android" 2524 | version = "0.1.1" 2525 | source = "registry+https://github.com/rust-lang/crates.io-index" 2526 | checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" 2527 | 2528 | [[package]] 2529 | name = "rustls-webpki" 2530 | version = "0.102.8" 2531 | source = "registry+https://github.com/rust-lang/crates.io-index" 2532 | checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" 2533 | dependencies = [ 2534 | "aws-lc-rs", 2535 | "ring", 2536 | "rustls-pki-types", 2537 | "untrusted", 2538 | ] 2539 | 2540 | [[package]] 2541 | name = "rustversion" 2542 | version = "1.0.19" 2543 | source = "registry+https://github.com/rust-lang/crates.io-index" 2544 | checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" 2545 | 2546 | [[package]] 2547 | name = "ryu" 2548 | version = "1.0.19" 2549 | source = "registry+https://github.com/rust-lang/crates.io-index" 2550 | checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" 2551 | 2552 | [[package]] 2553 | name = "same-file" 2554 | version = "1.0.6" 2555 | source = "registry+https://github.com/rust-lang/crates.io-index" 2556 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 2557 | dependencies = [ 2558 | "winapi-util", 2559 | ] 2560 | 2561 | [[package]] 2562 | name = "schannel" 2563 | version = "0.1.27" 2564 | source = "registry+https://github.com/rust-lang/crates.io-index" 2565 | checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" 2566 | dependencies = [ 2567 | "windows-sys 0.59.0", 2568 | ] 2569 | 2570 | [[package]] 2571 | name = "scopeguard" 2572 | version = "1.2.0" 2573 | source = "registry+https://github.com/rust-lang/crates.io-index" 2574 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 2575 | 2576 | [[package]] 2577 | name = "seahash" 2578 | version = "4.1.0" 2579 | source = "registry+https://github.com/rust-lang/crates.io-index" 2580 | checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" 2581 | 2582 | [[package]] 2583 | name = "security-framework" 2584 | version = "2.11.1" 2585 | source = "registry+https://github.com/rust-lang/crates.io-index" 2586 | checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" 2587 | dependencies = [ 2588 | "bitflags 2.8.0", 2589 | "core-foundation", 2590 | "core-foundation-sys", 2591 | "libc", 2592 | "num-bigint", 2593 | "security-framework-sys", 2594 | ] 2595 | 2596 | [[package]] 2597 | name = "security-framework-sys" 2598 | version = "2.14.0" 2599 | source = "registry+https://github.com/rust-lang/crates.io-index" 2600 | checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" 2601 | dependencies = [ 2602 | "core-foundation-sys", 2603 | "libc", 2604 | ] 2605 | 2606 | [[package]] 2607 | name = "semver" 2608 | version = "1.0.25" 2609 | source = "registry+https://github.com/rust-lang/crates.io-index" 2610 | checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" 2611 | 2612 | [[package]] 2613 | name = "serde" 2614 | version = "1.0.217" 2615 | source = "registry+https://github.com/rust-lang/crates.io-index" 2616 | checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" 2617 | dependencies = [ 2618 | "serde_derive", 2619 | ] 2620 | 2621 | [[package]] 2622 | name = "serde_derive" 2623 | version = "1.0.217" 2624 | source = "registry+https://github.com/rust-lang/crates.io-index" 2625 | checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" 2626 | dependencies = [ 2627 | "proc-macro2", 2628 | "quote", 2629 | "syn 2.0.98", 2630 | ] 2631 | 2632 | [[package]] 2633 | name = "serde_json" 2634 | version = "1.0.139" 2635 | source = "registry+https://github.com/rust-lang/crates.io-index" 2636 | checksum = "44f86c3acccc9c65b153fe1b85a3be07fe5515274ec9f0653b4a0875731c72a6" 2637 | dependencies = [ 2638 | "itoa", 2639 | "memchr", 2640 | "ryu", 2641 | "serde", 2642 | ] 2643 | 2644 | [[package]] 2645 | name = "serde_spanned" 2646 | version = "0.6.8" 2647 | source = "registry+https://github.com/rust-lang/crates.io-index" 2648 | checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" 2649 | dependencies = [ 2650 | "serde", 2651 | ] 2652 | 2653 | [[package]] 2654 | name = "serde_urlencoded" 2655 | version = "0.7.1" 2656 | source = "registry+https://github.com/rust-lang/crates.io-index" 2657 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 2658 | dependencies = [ 2659 | "form_urlencoded", 2660 | "itoa", 2661 | "ryu", 2662 | "serde", 2663 | ] 2664 | 2665 | [[package]] 2666 | name = "serde_with" 2667 | version = "3.12.0" 2668 | source = "registry+https://github.com/rust-lang/crates.io-index" 2669 | checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa" 2670 | dependencies = [ 2671 | "base64", 2672 | "chrono", 2673 | "hex", 2674 | "indexmap 1.9.3", 2675 | "indexmap 2.7.1", 2676 | "serde", 2677 | "serde_derive", 2678 | "serde_json", 2679 | "serde_with_macros", 2680 | "time", 2681 | ] 2682 | 2683 | [[package]] 2684 | name = "serde_with_macros" 2685 | version = "3.12.0" 2686 | source = "registry+https://github.com/rust-lang/crates.io-index" 2687 | checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e" 2688 | dependencies = [ 2689 | "darling", 2690 | "proc-macro2", 2691 | "quote", 2692 | "syn 2.0.98", 2693 | ] 2694 | 2695 | [[package]] 2696 | name = "shlex" 2697 | version = "1.3.0" 2698 | source = "registry+https://github.com/rust-lang/crates.io-index" 2699 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 2700 | 2701 | [[package]] 2702 | name = "signal-hook-registry" 2703 | version = "1.4.2" 2704 | source = "registry+https://github.com/rust-lang/crates.io-index" 2705 | checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" 2706 | dependencies = [ 2707 | "libc", 2708 | ] 2709 | 2710 | [[package]] 2711 | name = "simdutf8" 2712 | version = "0.1.5" 2713 | source = "registry+https://github.com/rust-lang/crates.io-index" 2714 | checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" 2715 | 2716 | [[package]] 2717 | name = "slab" 2718 | version = "0.4.9" 2719 | source = "registry+https://github.com/rust-lang/crates.io-index" 2720 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 2721 | dependencies = [ 2722 | "autocfg", 2723 | ] 2724 | 2725 | [[package]] 2726 | name = "smallvec" 2727 | version = "1.14.0" 2728 | source = "registry+https://github.com/rust-lang/crates.io-index" 2729 | checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" 2730 | 2731 | [[package]] 2732 | name = "socket2" 2733 | version = "0.5.8" 2734 | source = "registry+https://github.com/rust-lang/crates.io-index" 2735 | checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" 2736 | dependencies = [ 2737 | "libc", 2738 | "windows-sys 0.52.0", 2739 | ] 2740 | 2741 | [[package]] 2742 | name = "spin" 2743 | version = "0.9.8" 2744 | source = "registry+https://github.com/rust-lang/crates.io-index" 2745 | checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" 2746 | dependencies = [ 2747 | "lock_api", 2748 | ] 2749 | 2750 | [[package]] 2751 | name = "stable_deref_trait" 2752 | version = "1.2.0" 2753 | source = "registry+https://github.com/rust-lang/crates.io-index" 2754 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 2755 | 2756 | [[package]] 2757 | name = "strsim" 2758 | version = "0.11.1" 2759 | source = "registry+https://github.com/rust-lang/crates.io-index" 2760 | checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 2761 | 2762 | [[package]] 2763 | name = "strum" 2764 | version = "0.27.1" 2765 | source = "registry+https://github.com/rust-lang/crates.io-index" 2766 | checksum = "f64def088c51c9510a8579e3c5d67c65349dcf755e5479ad3d010aa6454e2c32" 2767 | dependencies = [ 2768 | "strum_macros", 2769 | ] 2770 | 2771 | [[package]] 2772 | name = "strum_macros" 2773 | version = "0.27.1" 2774 | source = "registry+https://github.com/rust-lang/crates.io-index" 2775 | checksum = "c77a8c5abcaf0f9ce05d62342b7d298c346515365c36b673df4ebe3ced01fde8" 2776 | dependencies = [ 2777 | "heck", 2778 | "proc-macro2", 2779 | "quote", 2780 | "rustversion", 2781 | "syn 2.0.98", 2782 | ] 2783 | 2784 | [[package]] 2785 | name = "subtle" 2786 | version = "2.6.1" 2787 | source = "registry+https://github.com/rust-lang/crates.io-index" 2788 | checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" 2789 | 2790 | [[package]] 2791 | name = "syn" 2792 | version = "1.0.109" 2793 | source = "registry+https://github.com/rust-lang/crates.io-index" 2794 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 2795 | dependencies = [ 2796 | "proc-macro2", 2797 | "quote", 2798 | "unicode-ident", 2799 | ] 2800 | 2801 | [[package]] 2802 | name = "syn" 2803 | version = "2.0.98" 2804 | source = "registry+https://github.com/rust-lang/crates.io-index" 2805 | checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" 2806 | dependencies = [ 2807 | "proc-macro2", 2808 | "quote", 2809 | "unicode-ident", 2810 | ] 2811 | 2812 | [[package]] 2813 | name = "sync_wrapper" 2814 | version = "1.0.2" 2815 | source = "registry+https://github.com/rust-lang/crates.io-index" 2816 | checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" 2817 | dependencies = [ 2818 | "futures-core", 2819 | ] 2820 | 2821 | [[package]] 2822 | name = "synstructure" 2823 | version = "0.13.1" 2824 | source = "registry+https://github.com/rust-lang/crates.io-index" 2825 | checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" 2826 | dependencies = [ 2827 | "proc-macro2", 2828 | "quote", 2829 | "syn 2.0.98", 2830 | ] 2831 | 2832 | [[package]] 2833 | name = "tap" 2834 | version = "1.0.1" 2835 | source = "registry+https://github.com/rust-lang/crates.io-index" 2836 | checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" 2837 | 2838 | [[package]] 2839 | name = "target-lexicon" 2840 | version = "0.12.16" 2841 | source = "registry+https://github.com/rust-lang/crates.io-index" 2842 | checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" 2843 | 2844 | [[package]] 2845 | name = "thiserror" 2846 | version = "1.0.69" 2847 | source = "registry+https://github.com/rust-lang/crates.io-index" 2848 | checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 2849 | dependencies = [ 2850 | "thiserror-impl 1.0.69", 2851 | ] 2852 | 2853 | [[package]] 2854 | name = "thiserror" 2855 | version = "2.0.11" 2856 | source = "registry+https://github.com/rust-lang/crates.io-index" 2857 | checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" 2858 | dependencies = [ 2859 | "thiserror-impl 2.0.11", 2860 | ] 2861 | 2862 | [[package]] 2863 | name = "thiserror-impl" 2864 | version = "1.0.69" 2865 | source = "registry+https://github.com/rust-lang/crates.io-index" 2866 | checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 2867 | dependencies = [ 2868 | "proc-macro2", 2869 | "quote", 2870 | "syn 2.0.98", 2871 | ] 2872 | 2873 | [[package]] 2874 | name = "thiserror-impl" 2875 | version = "2.0.11" 2876 | source = "registry+https://github.com/rust-lang/crates.io-index" 2877 | checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" 2878 | dependencies = [ 2879 | "proc-macro2", 2880 | "quote", 2881 | "syn 2.0.98", 2882 | ] 2883 | 2884 | [[package]] 2885 | name = "time" 2886 | version = "0.3.37" 2887 | source = "registry+https://github.com/rust-lang/crates.io-index" 2888 | checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" 2889 | dependencies = [ 2890 | "deranged", 2891 | "itoa", 2892 | "num-conv", 2893 | "powerfmt", 2894 | "serde", 2895 | "time-core", 2896 | "time-macros", 2897 | ] 2898 | 2899 | [[package]] 2900 | name = "time-core" 2901 | version = "0.1.2" 2902 | source = "registry+https://github.com/rust-lang/crates.io-index" 2903 | checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" 2904 | 2905 | [[package]] 2906 | name = "time-macros" 2907 | version = "0.2.19" 2908 | source = "registry+https://github.com/rust-lang/crates.io-index" 2909 | checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" 2910 | dependencies = [ 2911 | "num-conv", 2912 | "time-core", 2913 | ] 2914 | 2915 | [[package]] 2916 | name = "tinystr" 2917 | version = "0.7.6" 2918 | source = "registry+https://github.com/rust-lang/crates.io-index" 2919 | checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" 2920 | dependencies = [ 2921 | "displaydoc", 2922 | "zerovec", 2923 | ] 2924 | 2925 | [[package]] 2926 | name = "tinyvec" 2927 | version = "1.8.1" 2928 | source = "registry+https://github.com/rust-lang/crates.io-index" 2929 | checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" 2930 | dependencies = [ 2931 | "tinyvec_macros", 2932 | ] 2933 | 2934 | [[package]] 2935 | name = "tinyvec_macros" 2936 | version = "0.1.1" 2937 | source = "registry+https://github.com/rust-lang/crates.io-index" 2938 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 2939 | 2940 | [[package]] 2941 | name = "tokio" 2942 | version = "1.43.0" 2943 | source = "registry+https://github.com/rust-lang/crates.io-index" 2944 | checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" 2945 | dependencies = [ 2946 | "backtrace", 2947 | "bytes", 2948 | "libc", 2949 | "mio", 2950 | "parking_lot 0.12.3", 2951 | "pin-project-lite", 2952 | "signal-hook-registry", 2953 | "socket2", 2954 | "tokio-macros", 2955 | "windows-sys 0.52.0", 2956 | ] 2957 | 2958 | [[package]] 2959 | name = "tokio-macros" 2960 | version = "2.5.0" 2961 | source = "registry+https://github.com/rust-lang/crates.io-index" 2962 | checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" 2963 | dependencies = [ 2964 | "proc-macro2", 2965 | "quote", 2966 | "syn 2.0.98", 2967 | ] 2968 | 2969 | [[package]] 2970 | name = "tokio-rustls" 2971 | version = "0.26.1" 2972 | source = "registry+https://github.com/rust-lang/crates.io-index" 2973 | checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" 2974 | dependencies = [ 2975 | "rustls", 2976 | "tokio", 2977 | ] 2978 | 2979 | [[package]] 2980 | name = "toml" 2981 | version = "0.8.20" 2982 | source = "registry+https://github.com/rust-lang/crates.io-index" 2983 | checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" 2984 | dependencies = [ 2985 | "serde", 2986 | "serde_spanned", 2987 | "toml_datetime", 2988 | "toml_edit", 2989 | ] 2990 | 2991 | [[package]] 2992 | name = "toml_datetime" 2993 | version = "0.6.8" 2994 | source = "registry+https://github.com/rust-lang/crates.io-index" 2995 | checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" 2996 | dependencies = [ 2997 | "serde", 2998 | ] 2999 | 3000 | [[package]] 3001 | name = "toml_edit" 3002 | version = "0.22.24" 3003 | source = "registry+https://github.com/rust-lang/crates.io-index" 3004 | checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" 3005 | dependencies = [ 3006 | "indexmap 2.7.1", 3007 | "serde", 3008 | "serde_spanned", 3009 | "toml_datetime", 3010 | "winnow", 3011 | ] 3012 | 3013 | [[package]] 3014 | name = "tower" 3015 | version = "0.5.2" 3016 | source = "registry+https://github.com/rust-lang/crates.io-index" 3017 | checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" 3018 | dependencies = [ 3019 | "futures-core", 3020 | "futures-util", 3021 | "pin-project-lite", 3022 | "sync_wrapper", 3023 | "tokio", 3024 | "tower-layer", 3025 | "tower-service", 3026 | ] 3027 | 3028 | [[package]] 3029 | name = "tower-layer" 3030 | version = "0.3.3" 3031 | source = "registry+https://github.com/rust-lang/crates.io-index" 3032 | checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" 3033 | 3034 | [[package]] 3035 | name = "tower-service" 3036 | version = "0.3.3" 3037 | source = "registry+https://github.com/rust-lang/crates.io-index" 3038 | checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" 3039 | 3040 | [[package]] 3041 | name = "tracing" 3042 | version = "0.1.41" 3043 | source = "registry+https://github.com/rust-lang/crates.io-index" 3044 | checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" 3045 | dependencies = [ 3046 | "log", 3047 | "pin-project-lite", 3048 | "tracing-attributes", 3049 | "tracing-core", 3050 | ] 3051 | 3052 | [[package]] 3053 | name = "tracing-attributes" 3054 | version = "0.1.28" 3055 | source = "registry+https://github.com/rust-lang/crates.io-index" 3056 | checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" 3057 | dependencies = [ 3058 | "proc-macro2", 3059 | "quote", 3060 | "syn 2.0.98", 3061 | ] 3062 | 3063 | [[package]] 3064 | name = "tracing-core" 3065 | version = "0.1.33" 3066 | source = "registry+https://github.com/rust-lang/crates.io-index" 3067 | checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" 3068 | dependencies = [ 3069 | "once_cell", 3070 | ] 3071 | 3072 | [[package]] 3073 | name = "trait-variant" 3074 | version = "0.1.2" 3075 | source = "registry+https://github.com/rust-lang/crates.io-index" 3076 | checksum = "70977707304198400eb4835a78f6a9f928bf41bba420deb8fdb175cd965d77a7" 3077 | dependencies = [ 3078 | "proc-macro2", 3079 | "quote", 3080 | "syn 2.0.98", 3081 | ] 3082 | 3083 | [[package]] 3084 | name = "try-lock" 3085 | version = "0.2.5" 3086 | source = "registry+https://github.com/rust-lang/crates.io-index" 3087 | checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 3088 | 3089 | [[package]] 3090 | name = "typenum" 3091 | version = "1.18.0" 3092 | source = "registry+https://github.com/rust-lang/crates.io-index" 3093 | checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" 3094 | 3095 | [[package]] 3096 | name = "unicode-ident" 3097 | version = "1.0.17" 3098 | source = "registry+https://github.com/rust-lang/crates.io-index" 3099 | checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe" 3100 | 3101 | [[package]] 3102 | name = "unicode-segmentation" 3103 | version = "1.12.0" 3104 | source = "registry+https://github.com/rust-lang/crates.io-index" 3105 | checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" 3106 | 3107 | [[package]] 3108 | name = "unicode-xid" 3109 | version = "0.2.6" 3110 | source = "registry+https://github.com/rust-lang/crates.io-index" 3111 | checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" 3112 | 3113 | [[package]] 3114 | name = "unindent" 3115 | version = "0.2.3" 3116 | source = "registry+https://github.com/rust-lang/crates.io-index" 3117 | checksum = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce" 3118 | 3119 | [[package]] 3120 | name = "universal-hash" 3121 | version = "0.5.1" 3122 | source = "registry+https://github.com/rust-lang/crates.io-index" 3123 | checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" 3124 | dependencies = [ 3125 | "crypto-common", 3126 | "subtle", 3127 | ] 3128 | 3129 | [[package]] 3130 | name = "untrusted" 3131 | version = "0.9.0" 3132 | source = "registry+https://github.com/rust-lang/crates.io-index" 3133 | checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" 3134 | 3135 | [[package]] 3136 | name = "url" 3137 | version = "2.5.4" 3138 | source = "registry+https://github.com/rust-lang/crates.io-index" 3139 | checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" 3140 | dependencies = [ 3141 | "form_urlencoded", 3142 | "idna", 3143 | "percent-encoding", 3144 | ] 3145 | 3146 | [[package]] 3147 | name = "utf16_iter" 3148 | version = "1.0.5" 3149 | source = "registry+https://github.com/rust-lang/crates.io-index" 3150 | checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" 3151 | 3152 | [[package]] 3153 | name = "utf8-width" 3154 | version = "0.1.7" 3155 | source = "registry+https://github.com/rust-lang/crates.io-index" 3156 | checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3" 3157 | 3158 | [[package]] 3159 | name = "utf8_iter" 3160 | version = "1.0.4" 3161 | source = "registry+https://github.com/rust-lang/crates.io-index" 3162 | checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 3163 | 3164 | [[package]] 3165 | name = "utf8parse" 3166 | version = "0.2.2" 3167 | source = "registry+https://github.com/rust-lang/crates.io-index" 3168 | checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 3169 | 3170 | [[package]] 3171 | name = "uuid" 3172 | version = "1.13.2" 3173 | source = "registry+https://github.com/rust-lang/crates.io-index" 3174 | checksum = "8c1f41ffb7cf259f1ecc2876861a17e7142e63ead296f671f81f6ae85903e0d6" 3175 | dependencies = [ 3176 | "getrandom 0.3.1", 3177 | "rand 0.9.0", 3178 | "zerocopy 0.8.20", 3179 | ] 3180 | 3181 | [[package]] 3182 | name = "version_check" 3183 | version = "0.9.5" 3184 | source = "registry+https://github.com/rust-lang/crates.io-index" 3185 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 3186 | 3187 | [[package]] 3188 | name = "walkdir" 3189 | version = "2.5.0" 3190 | source = "registry+https://github.com/rust-lang/crates.io-index" 3191 | checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" 3192 | dependencies = [ 3193 | "same-file", 3194 | "winapi-util", 3195 | ] 3196 | 3197 | [[package]] 3198 | name = "want" 3199 | version = "0.3.1" 3200 | source = "registry+https://github.com/rust-lang/crates.io-index" 3201 | checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" 3202 | dependencies = [ 3203 | "try-lock", 3204 | ] 3205 | 3206 | [[package]] 3207 | name = "wasi" 3208 | version = "0.11.0+wasi-snapshot-preview1" 3209 | source = "registry+https://github.com/rust-lang/crates.io-index" 3210 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 3211 | 3212 | [[package]] 3213 | name = "wasi" 3214 | version = "0.13.3+wasi-0.2.2" 3215 | source = "registry+https://github.com/rust-lang/crates.io-index" 3216 | checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" 3217 | dependencies = [ 3218 | "wit-bindgen-rt", 3219 | ] 3220 | 3221 | [[package]] 3222 | name = "wasm-bindgen" 3223 | version = "0.2.100" 3224 | source = "registry+https://github.com/rust-lang/crates.io-index" 3225 | checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" 3226 | dependencies = [ 3227 | "cfg-if", 3228 | "once_cell", 3229 | "rustversion", 3230 | "wasm-bindgen-macro", 3231 | ] 3232 | 3233 | [[package]] 3234 | name = "wasm-bindgen-backend" 3235 | version = "0.2.100" 3236 | source = "registry+https://github.com/rust-lang/crates.io-index" 3237 | checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" 3238 | dependencies = [ 3239 | "bumpalo", 3240 | "log", 3241 | "proc-macro2", 3242 | "quote", 3243 | "syn 2.0.98", 3244 | "wasm-bindgen-shared", 3245 | ] 3246 | 3247 | [[package]] 3248 | name = "wasm-bindgen-futures" 3249 | version = "0.4.50" 3250 | source = "registry+https://github.com/rust-lang/crates.io-index" 3251 | checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" 3252 | dependencies = [ 3253 | "cfg-if", 3254 | "js-sys", 3255 | "once_cell", 3256 | "wasm-bindgen", 3257 | "web-sys", 3258 | ] 3259 | 3260 | [[package]] 3261 | name = "wasm-bindgen-macro" 3262 | version = "0.2.100" 3263 | source = "registry+https://github.com/rust-lang/crates.io-index" 3264 | checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" 3265 | dependencies = [ 3266 | "quote", 3267 | "wasm-bindgen-macro-support", 3268 | ] 3269 | 3270 | [[package]] 3271 | name = "wasm-bindgen-macro-support" 3272 | version = "0.2.100" 3273 | source = "registry+https://github.com/rust-lang/crates.io-index" 3274 | checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" 3275 | dependencies = [ 3276 | "proc-macro2", 3277 | "quote", 3278 | "syn 2.0.98", 3279 | "wasm-bindgen-backend", 3280 | "wasm-bindgen-shared", 3281 | ] 3282 | 3283 | [[package]] 3284 | name = "wasm-bindgen-shared" 3285 | version = "0.2.100" 3286 | source = "registry+https://github.com/rust-lang/crates.io-index" 3287 | checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" 3288 | dependencies = [ 3289 | "unicode-ident", 3290 | ] 3291 | 3292 | [[package]] 3293 | name = "wasm-timer" 3294 | version = "0.2.5" 3295 | source = "registry+https://github.com/rust-lang/crates.io-index" 3296 | checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f" 3297 | dependencies = [ 3298 | "futures", 3299 | "js-sys", 3300 | "parking_lot 0.11.2", 3301 | "pin-utils", 3302 | "wasm-bindgen", 3303 | "wasm-bindgen-futures", 3304 | "web-sys", 3305 | ] 3306 | 3307 | [[package]] 3308 | name = "web-sys" 3309 | version = "0.3.77" 3310 | source = "registry+https://github.com/rust-lang/crates.io-index" 3311 | checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" 3312 | dependencies = [ 3313 | "js-sys", 3314 | "wasm-bindgen", 3315 | ] 3316 | 3317 | [[package]] 3318 | name = "web-time" 3319 | version = "1.1.0" 3320 | source = "registry+https://github.com/rust-lang/crates.io-index" 3321 | checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" 3322 | dependencies = [ 3323 | "js-sys", 3324 | "wasm-bindgen", 3325 | ] 3326 | 3327 | [[package]] 3328 | name = "webpki-root-certs" 3329 | version = "0.26.8" 3330 | source = "registry+https://github.com/rust-lang/crates.io-index" 3331 | checksum = "09aed61f5e8d2c18344b3faa33a4c837855fe56642757754775548fee21386c4" 3332 | dependencies = [ 3333 | "rustls-pki-types", 3334 | ] 3335 | 3336 | [[package]] 3337 | name = "webpki-roots" 3338 | version = "0.26.8" 3339 | source = "registry+https://github.com/rust-lang/crates.io-index" 3340 | checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9" 3341 | dependencies = [ 3342 | "rustls-pki-types", 3343 | ] 3344 | 3345 | [[package]] 3346 | name = "which" 3347 | version = "4.4.2" 3348 | source = "registry+https://github.com/rust-lang/crates.io-index" 3349 | checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" 3350 | dependencies = [ 3351 | "either", 3352 | "home", 3353 | "once_cell", 3354 | "rustix", 3355 | ] 3356 | 3357 | [[package]] 3358 | name = "winapi" 3359 | version = "0.3.9" 3360 | source = "registry+https://github.com/rust-lang/crates.io-index" 3361 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 3362 | dependencies = [ 3363 | "winapi-i686-pc-windows-gnu", 3364 | "winapi-x86_64-pc-windows-gnu", 3365 | ] 3366 | 3367 | [[package]] 3368 | name = "winapi-i686-pc-windows-gnu" 3369 | version = "0.4.0" 3370 | source = "registry+https://github.com/rust-lang/crates.io-index" 3371 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 3372 | 3373 | [[package]] 3374 | name = "winapi-util" 3375 | version = "0.1.9" 3376 | source = "registry+https://github.com/rust-lang/crates.io-index" 3377 | checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" 3378 | dependencies = [ 3379 | "windows-sys 0.59.0", 3380 | ] 3381 | 3382 | [[package]] 3383 | name = "winapi-x86_64-pc-windows-gnu" 3384 | version = "0.4.0" 3385 | source = "registry+https://github.com/rust-lang/crates.io-index" 3386 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 3387 | 3388 | [[package]] 3389 | name = "windows-core" 3390 | version = "0.52.0" 3391 | source = "registry+https://github.com/rust-lang/crates.io-index" 3392 | checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" 3393 | dependencies = [ 3394 | "windows-targets", 3395 | ] 3396 | 3397 | [[package]] 3398 | name = "windows-registry" 3399 | version = "0.2.0" 3400 | source = "registry+https://github.com/rust-lang/crates.io-index" 3401 | checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" 3402 | dependencies = [ 3403 | "windows-result", 3404 | "windows-strings", 3405 | "windows-targets", 3406 | ] 3407 | 3408 | [[package]] 3409 | name = "windows-result" 3410 | version = "0.2.0" 3411 | source = "registry+https://github.com/rust-lang/crates.io-index" 3412 | checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" 3413 | dependencies = [ 3414 | "windows-targets", 3415 | ] 3416 | 3417 | [[package]] 3418 | name = "windows-strings" 3419 | version = "0.1.0" 3420 | source = "registry+https://github.com/rust-lang/crates.io-index" 3421 | checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" 3422 | dependencies = [ 3423 | "windows-result", 3424 | "windows-targets", 3425 | ] 3426 | 3427 | [[package]] 3428 | name = "windows-sys" 3429 | version = "0.52.0" 3430 | source = "registry+https://github.com/rust-lang/crates.io-index" 3431 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 3432 | dependencies = [ 3433 | "windows-targets", 3434 | ] 3435 | 3436 | [[package]] 3437 | name = "windows-sys" 3438 | version = "0.59.0" 3439 | source = "registry+https://github.com/rust-lang/crates.io-index" 3440 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 3441 | dependencies = [ 3442 | "windows-targets", 3443 | ] 3444 | 3445 | [[package]] 3446 | name = "windows-targets" 3447 | version = "0.52.6" 3448 | source = "registry+https://github.com/rust-lang/crates.io-index" 3449 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 3450 | dependencies = [ 3451 | "windows_aarch64_gnullvm", 3452 | "windows_aarch64_msvc", 3453 | "windows_i686_gnu", 3454 | "windows_i686_gnullvm", 3455 | "windows_i686_msvc", 3456 | "windows_x86_64_gnu", 3457 | "windows_x86_64_gnullvm", 3458 | "windows_x86_64_msvc", 3459 | ] 3460 | 3461 | [[package]] 3462 | name = "windows_aarch64_gnullvm" 3463 | version = "0.52.6" 3464 | source = "registry+https://github.com/rust-lang/crates.io-index" 3465 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 3466 | 3467 | [[package]] 3468 | name = "windows_aarch64_msvc" 3469 | version = "0.52.6" 3470 | source = "registry+https://github.com/rust-lang/crates.io-index" 3471 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 3472 | 3473 | [[package]] 3474 | name = "windows_i686_gnu" 3475 | version = "0.52.6" 3476 | source = "registry+https://github.com/rust-lang/crates.io-index" 3477 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 3478 | 3479 | [[package]] 3480 | name = "windows_i686_gnullvm" 3481 | version = "0.52.6" 3482 | source = "registry+https://github.com/rust-lang/crates.io-index" 3483 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 3484 | 3485 | [[package]] 3486 | name = "windows_i686_msvc" 3487 | version = "0.52.6" 3488 | source = "registry+https://github.com/rust-lang/crates.io-index" 3489 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 3490 | 3491 | [[package]] 3492 | name = "windows_x86_64_gnu" 3493 | version = "0.52.6" 3494 | source = "registry+https://github.com/rust-lang/crates.io-index" 3495 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 3496 | 3497 | [[package]] 3498 | name = "windows_x86_64_gnullvm" 3499 | version = "0.52.6" 3500 | source = "registry+https://github.com/rust-lang/crates.io-index" 3501 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 3502 | 3503 | [[package]] 3504 | name = "windows_x86_64_msvc" 3505 | version = "0.52.6" 3506 | source = "registry+https://github.com/rust-lang/crates.io-index" 3507 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 3508 | 3509 | [[package]] 3510 | name = "winnow" 3511 | version = "0.7.3" 3512 | source = "registry+https://github.com/rust-lang/crates.io-index" 3513 | checksum = "0e7f4ea97f6f78012141bcdb6a216b2609f0979ada50b20ca5b52dde2eac2bb1" 3514 | dependencies = [ 3515 | "memchr", 3516 | ] 3517 | 3518 | [[package]] 3519 | name = "wit-bindgen-rt" 3520 | version = "0.33.0" 3521 | source = "registry+https://github.com/rust-lang/crates.io-index" 3522 | checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" 3523 | dependencies = [ 3524 | "bitflags 2.8.0", 3525 | ] 3526 | 3527 | [[package]] 3528 | name = "write16" 3529 | version = "1.0.0" 3530 | source = "registry+https://github.com/rust-lang/crates.io-index" 3531 | checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" 3532 | 3533 | [[package]] 3534 | name = "writeable" 3535 | version = "0.5.5" 3536 | source = "registry+https://github.com/rust-lang/crates.io-index" 3537 | checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" 3538 | 3539 | [[package]] 3540 | name = "wyz" 3541 | version = "0.5.1" 3542 | source = "registry+https://github.com/rust-lang/crates.io-index" 3543 | checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" 3544 | dependencies = [ 3545 | "tap", 3546 | ] 3547 | 3548 | [[package]] 3549 | name = "yoke" 3550 | version = "0.7.5" 3551 | source = "registry+https://github.com/rust-lang/crates.io-index" 3552 | checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" 3553 | dependencies = [ 3554 | "serde", 3555 | "stable_deref_trait", 3556 | "yoke-derive", 3557 | "zerofrom", 3558 | ] 3559 | 3560 | [[package]] 3561 | name = "yoke-derive" 3562 | version = "0.7.5" 3563 | source = "registry+https://github.com/rust-lang/crates.io-index" 3564 | checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" 3565 | dependencies = [ 3566 | "proc-macro2", 3567 | "quote", 3568 | "syn 2.0.98", 3569 | "synstructure", 3570 | ] 3571 | 3572 | [[package]] 3573 | name = "zerocopy" 3574 | version = "0.7.35" 3575 | source = "registry+https://github.com/rust-lang/crates.io-index" 3576 | checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" 3577 | dependencies = [ 3578 | "byteorder", 3579 | "zerocopy-derive 0.7.35", 3580 | ] 3581 | 3582 | [[package]] 3583 | name = "zerocopy" 3584 | version = "0.8.20" 3585 | source = "registry+https://github.com/rust-lang/crates.io-index" 3586 | checksum = "dde3bb8c68a8f3f1ed4ac9221aad6b10cece3e60a8e2ea54a6a2dec806d0084c" 3587 | dependencies = [ 3588 | "zerocopy-derive 0.8.20", 3589 | ] 3590 | 3591 | [[package]] 3592 | name = "zerocopy-derive" 3593 | version = "0.7.35" 3594 | source = "registry+https://github.com/rust-lang/crates.io-index" 3595 | checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" 3596 | dependencies = [ 3597 | "proc-macro2", 3598 | "quote", 3599 | "syn 2.0.98", 3600 | ] 3601 | 3602 | [[package]] 3603 | name = "zerocopy-derive" 3604 | version = "0.8.20" 3605 | source = "registry+https://github.com/rust-lang/crates.io-index" 3606 | checksum = "eea57037071898bf96a6da35fd626f4f27e9cee3ead2a6c703cf09d472b2e700" 3607 | dependencies = [ 3608 | "proc-macro2", 3609 | "quote", 3610 | "syn 2.0.98", 3611 | ] 3612 | 3613 | [[package]] 3614 | name = "zerofrom" 3615 | version = "0.1.5" 3616 | source = "registry+https://github.com/rust-lang/crates.io-index" 3617 | checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" 3618 | dependencies = [ 3619 | "zerofrom-derive", 3620 | ] 3621 | 3622 | [[package]] 3623 | name = "zerofrom-derive" 3624 | version = "0.1.5" 3625 | source = "registry+https://github.com/rust-lang/crates.io-index" 3626 | checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" 3627 | dependencies = [ 3628 | "proc-macro2", 3629 | "quote", 3630 | "syn 2.0.98", 3631 | "synstructure", 3632 | ] 3633 | 3634 | [[package]] 3635 | name = "zeroize" 3636 | version = "1.8.1" 3637 | source = "registry+https://github.com/rust-lang/crates.io-index" 3638 | checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" 3639 | 3640 | [[package]] 3641 | name = "zerovec" 3642 | version = "0.10.4" 3643 | source = "registry+https://github.com/rust-lang/crates.io-index" 3644 | checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" 3645 | dependencies = [ 3646 | "yoke", 3647 | "zerofrom", 3648 | "zerovec-derive", 3649 | ] 3650 | 3651 | [[package]] 3652 | name = "zerovec-derive" 3653 | version = "0.10.3" 3654 | source = "registry+https://github.com/rust-lang/crates.io-index" 3655 | checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" 3656 | dependencies = [ 3657 | "proc-macro2", 3658 | "quote", 3659 | "syn 2.0.98", 3660 | ] 3661 | --------------------------------------------------------------------------------