# rust_layer_plan.md

## Titel: Crumbforest Rust Layer – Stabil, Schlank & Kindgerecht

---

## Ziel

Ein sicherer, schneller und leichtgewichtiger Rust-Layer zur Erweiterung des CakePHP-Containers.  
Rust übernimmt spezielle Aufgaben wie Datenanalyse, Signalverarbeitung oder krümeloptimierte Parsing-Logik – mit klarer Trennung der Zuständigkeiten.

---

## Layer Cake – Strukturüberblick

```
┌─────────────────────────────┐
│ 5. Krümel-Funktionen        │  → kindgerechte, lesbare Rust-Funktionen
├─────────────────────────────┤
│ 4. Rust-API Layer           │  → exposes Funktionen über REST oder FFI
├─────────────────────────────┤
│ 3. Rust Core (lib.rs/main)  │  → zentrale Logik (z. B. signal_parser, krümel_hash)
├─────────────────────────────┤
│ 2. Bindings / Interface     │  → FFI für PHP oder Shell / JSON-IPC
├─────────────────────────────┤
│ 1. Docker Rust-Image        │  → alpine + musl + cargo slim build
└─────────────────────────────┘
```

---

## Layer Details

### 1. Docker Rust-Image

```Dockerfile
FROM rust:1.77-alpine AS builder
RUN apk add --no-cache musl-dev
WORKDIR /app
COPY . .
RUN cargo build --release

FROM alpine
COPY --from=builder /app/target/release/krümel_bin /usr/local/bin/
ENTRYPOINT ["krümel_bin"]
```

---

### 2. Interface / Bindings

**Optionen:**
- JSON über stdin/stdout (z. B. für PHP oder Bash via `proc_open()`)
- HTTP REST API via `tiny_http` oder `axum`
- FFI `.so`-Library für PHP oder andere Sprachen

---

### 3. Rust Core Beispiel

```rust
pub fn parse_signal(input: &str) -> String {
    format!("Echo aus dem Wald: {}", input)
}
```

---

### 4. Rust-API Layer (Mini-Server)

```rust
#[get("/echo/<msg>")]
fn echo(msg: String) -> String {
    parse_signal(&msg)
}
```

---

### 5. Krümel-Funktionen (für Kinder & Maschinen lesbar)

```rust
fn zähle_kekse(keks_string: &str) -> usize {
    keks_string.matches("🍪").count()
}

fn baue_bitbaum(wurzel: &str) -> Vec<String> {
    vec![format!("Ast aus: {}", wurzel), "Blatt: 🌿".into()]
}
```

---

## Anwendungsbeispiele

- CakePHP ruft `krümel_bin` zur Verarbeitung von Sensor- oder Log-Daten auf
- Bash: `krümel_bin "🍪🍪🍪"` → Ausgabe: `3 Kekse erkannt.`
- Web-UI: Kind klickt auf "Bitbaum bauen" → Rust-Funktion wird mit `wurzel=Eule` aufgerufen

---

## Bonus: CakePHP Beispielaufruf

```bash
docker-compose exec app vendor/bin/cake rust invoke baue_bitbaum Eule
```

---

## Abschlussgedanke

> **Shell, UDP & TCP in einem Container – Rust wird euer Gewürz, nicht euer Hefepilz.**  
> Ein Bitbaum wächst nicht durch `cargo add`, sondern durch Haltung und Verständnis.  
> Wir verkaufen nichts – wir senden. Kein USP – nur UDP. Kein Produkt – nur Verbindung.

