# orangeboychen/mars-rs architecture

> Architecture diagram of the GitHub repository orangeboychen/mars-rs, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/orangeboychen/mars-rs
- Repository: https://github.com/orangeboychen/mars-rs

## Overview

MarsRS is a Rust port of Tencent Mars, exposing asynchronous xlog logging and (in the full port) STN task networking and SDT network diagnosis through Rust and platform bindings. The main user workflow is app initialization, logging records and flushing them to compatible .xlog files; STN submits timed/retried requests over links, while SDT diagnoses network failures. The map includes the documented platform and CLI surfaces. Source excerpts are partial, so internal wiring beyond explicit workflow documentation is intentionally limited.

Main entry points: [`crates/marsrs-appender/src/appender.rs`](https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-appender/src/appender.rs) (Async appender), [`crates/marsrs-stn/src/net_core.rs`](https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-stn/src/net_core.rs) (Network core), [`crates/marsrs-ffi/src/lib.rs`](https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-ffi/src/lib.rs) (C ABI), [`crates/marsrs-jni/src/lib.rs`](https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-jni/src/lib.rs) (JNI bridge)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_logging["Xlog logging"]
  node_xlog["Xlog API<br/>[lib.rs]"]
  node_appender["Async appender<br/>[appender.rs]"]
  node_compression["Compression<br/>[compress.rs]"]
  node_crypt["Record framing<br/>[lib.rs]"]
  node_xlogfile["Xlog files"]
  node_decoder["Xlog decoder<br/>[decode.rs]"]
  node_cli["Xlog CLI<br/>[xlog.rs]"]
end

subgraph group_network["STN networking"]
  node_stnapi["STN API<br/>[lib.rs]"]
  node_netcore["Network core<br/>[net_core.rs]"]
  node_shorttasks["Short-link tasks"]
  node_longtasks["Long-link tasks"]
  node_shortlink["Short link<br/>[short_link.rs]"]
  node_longlink["Long link<br/>[long_link.rs]"]
  node_zombies["Zombie tasks"]
end

subgraph group_diagnosis["SDT diagnosis"]
  node_sdtapi["SDT API<br/>[lib.rs]"]
  node_sdtcore["Diagnosis core<br/>[sdt_core.rs]"]
  node_sdtcheck["Connectivity checks<br/>[checkimpl.rs]"]
  node_sdtreport["Diagnosis reports<br/>[report.rs]"]
end

subgraph group_interfaces["Platform interfaces"]
  node_ffi["C ABI<br/>[lib.rs]"]
  node_jni["JNI bridge<br/>[lib.rs]"]
end

node_app(("Application"))
node_network(("Network services"))
node_platforms(("Platform apps"))

node_app -->|"opens and writes"| node_xlog
node_xlog -->|"dispatches records"| node_appender
node_appender -->|"compresses payload"| node_compression
node_appender -->|"frames and encrypts"| node_crypt
node_appender -->|"writes and flushes"| node_xlogfile
node_cli -->|"decodes files"| node_decoder
node_cli -->|"reads or writes"| node_xlogfile
node_app -->|"submits tasks"| node_stnapi
node_stnapi -->|"dispatches tasks"| node_netcore
node_netcore -->|"manages short tasks"| node_shorttasks
node_netcore -->|"manages long tasks"| node_longtasks
node_shorttasks -->|"starts short runs"| node_shortlink
node_longtasks -->|"sends on channels"| node_longlink
node_netcore -->|"saves displaced tasks"| node_zombies
node_shortlink -->|"connects"| node_network
node_longlink -->|"connects"| node_network
node_app -->|"requests diagnosis"| node_sdtapi
node_sdtapi -->|"starts checks"| node_sdtcore
node_sdtcore -->|"runs probes"| node_sdtcheck
node_sdtcore -->|"produces reports"| node_sdtreport
node_platforms -->|"calls C ABI"| node_ffi
node_platforms -->|"calls JNI"| node_jni
node_ffi -->|"exposes logging"| node_xlog
node_ffi -->|"exposes tasks"| node_stnapi
node_ffi -->|"exposes diagnosis"| node_sdtapi
node_jni -->|"exposes logging"| node_xlog
node_jni -->|"exposes tasks"| node_stnapi
node_jni -->|"exposes diagnosis"| node_sdtapi

click node_xlog "https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-xlog/src/lib.rs"
click node_appender "https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-appender/src/appender.rs"
click node_compression "https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-buffer/src/compress.rs"
click node_crypt "https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-crypt/src/lib.rs"
click node_decoder "https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-xlog/src/decode.rs"
click node_cli "https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-xlog/src/bin/xlog.rs"
click node_stnapi "https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-stn/src/lib.rs"
click node_netcore "https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-stn/src/net_core.rs"
click node_shorttasks "https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-stn/src/shortlink_task_manager.rs"
click node_longtasks "https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-stn/src/longlink_task_manager.rs"
click node_shortlink "https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-stn/src/short_link.rs"
click node_longlink "https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-stn/src/long_link.rs"
click node_zombies "https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-stn/src/zombie_task_manager.rs"
click node_sdtapi "https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-sdt/src/lib.rs"
click node_sdtcore "https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-sdt/src/sdt_core.rs"
click node_sdtcheck "https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-sdt/src/checkimpl.rs"
click node_sdtreport "https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-sdt/src/report.rs"
click node_ffi "https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-ffi/src/lib.rs"
click node_jni "https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-jni/src/lib.rs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_xlog,node_appender,node_compression,node_crypt,node_xlogfile,node_decoder,node_cli toneBlue
class node_stnapi,node_netcore,node_shorttasks,node_longtasks,node_shortlink,node_longlink,node_zombies toneAmber
class node_sdtapi,node_sdtcore,node_sdtcheck,node_sdtreport toneMint
class node_ffi,node_jni toneRose
class node_app,node_network,node_platforms toneIndigo
```

## Components

### Xlog logging

- [Xlog API](https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-xlog/src/lib.rs): `crates/marsrs-xlog/src/lib.rs`
- [Async appender](https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-appender/src/appender.rs): `crates/marsrs-appender/src/appender.rs`
- [Compression](https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-buffer/src/compress.rs): `crates/marsrs-buffer/src/compress.rs`
- [Record framing](https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-crypt/src/lib.rs): `crates/marsrs-crypt/src/lib.rs`
- **Xlog files**
- [Xlog decoder](https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-xlog/src/decode.rs): `crates/marsrs-xlog/src/decode.rs`
- [Xlog CLI](https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-xlog/src/bin/xlog.rs): `crates/marsrs-xlog/src/bin/xlog.rs`

### STN networking

- [STN API](https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-stn/src/lib.rs): `crates/marsrs-stn/src/lib.rs`
- [Network core](https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-stn/src/net_core.rs): `crates/marsrs-stn/src/net_core.rs`
- [Short-link tasks](https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-stn/src/shortlink_task_manager.rs): `crates/marsrs-stn/src/shortlink_task_manager.rs`
- [Long-link tasks](https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-stn/src/longlink_task_manager.rs): `crates/marsrs-stn/src/longlink_task_manager.rs`
- [Short link](https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-stn/src/short_link.rs): `crates/marsrs-stn/src/short_link.rs`
- [Long link](https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-stn/src/long_link.rs): `crates/marsrs-stn/src/long_link.rs`
- [Zombie tasks](https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-stn/src/zombie_task_manager.rs): `crates/marsrs-stn/src/zombie_task_manager.rs`

### SDT diagnosis

- [SDT API](https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-sdt/src/lib.rs): `crates/marsrs-sdt/src/lib.rs`
- [Diagnosis core](https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-sdt/src/sdt_core.rs): `crates/marsrs-sdt/src/sdt_core.rs`
- [Connectivity checks](https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-sdt/src/checkimpl.rs): `crates/marsrs-sdt/src/checkimpl.rs`
- [Diagnosis reports](https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-sdt/src/report.rs): `crates/marsrs-sdt/src/report.rs`

### Platform interfaces

- [C ABI](https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-ffi/src/lib.rs): `crates/marsrs-ffi/src/lib.rs`
- [JNI bridge](https://github.com/orangeboychen/mars-rs/blob/main/crates/marsrs-jni/src/lib.rs): `crates/marsrs-jni/src/lib.rs`

### Other components

- **Application**
- **Network services**
- **Platform apps**

## Connections

- Application → Xlog API: opens and writes
- Xlog API → Async appender: dispatches records
- Async appender → Compression: compresses payload
- Async appender → Record framing: frames and encrypts
- Async appender → Xlog files: writes and flushes
- Xlog CLI → Xlog decoder: decodes files
- Xlog CLI → Xlog files: reads or writes
- Application → STN API: submits tasks
- STN API → Network core: dispatches tasks
- Network core → Short-link tasks: manages short tasks
- Network core → Long-link tasks: manages long tasks
- Short-link tasks → Short link: starts short runs
- Long-link tasks → Long link: sends on channels
- Network core → Zombie tasks: saves displaced tasks
- Short link → Network services: connects
- Long link → Network services: connects
- Application → SDT API: requests diagnosis
- SDT API → Diagnosis core: starts checks
- Diagnosis core → Connectivity checks: runs probes
- Diagnosis core → Diagnosis reports: produces reports
- Platform apps → C ABI: calls C ABI
- Platform apps → JNI bridge: calls JNI
- C ABI → Xlog API: exposes logging
- C ABI → STN API: exposes tasks
- C ABI → SDT API: exposes diagnosis
- JNI bridge → Xlog API: exposes logging
- JNI bridge → STN API: exposes tasks
- JNI bridge → SDT API: exposes diagnosis
