# Mandolin Code Generation Issues Report (Axum Integration)

## 概要
Mandolin を使用して生成された Rust コードにおいて、最新の `axum` (v0.8.x 以降) と組み合わせた際にランタイムパニックおよびルーティングの不具合が発生しました。作者が修正を行うための詳細を以下にまとめます。

## 問題 1: `nest_service("/")` によるパニック

### 現象
`axum_router` 関数内でルーターをマウントする際、ベースパスが `"/"` の場合に `nest_service` を使用すると実行時にパニックが発生します。

### 生成された問題のコード
```rust
pub fn axum_router<S: ApiInterface + Sync + Send + 'static>(instance: S)->axum::Router{
    let instance_arc=std::sync::Arc::new(instance);
    axum::Router::new()
        .nest_service("/", axum_router_operations(instance_arc.clone()))
}
```

### エラーメッセージ
`thread 'main' panicked at ...: Nesting at the root is no longer supported. Use fallback_service instead.`

### 推奨される修正
パスが `"/"` の場合は `nest_service` でラップせず、直接 `axum_router_operations` の結果を返す、あるいはマウント方法を調整する必要があります。

---

## 問題 2: 絶対 URL が `nest_service` に渡される

### 現象
TypeSpec の `@server` デコレータに絶対 URL (例: `https://example.com`) が指定されている場合、それがそのまま `nest_service` の第1引数として生成されます。

### 再現 TypeSpec
```typespec
@server("https://example.com", "Main server")
namespace MyApi;
```

### 生成された問題のコード
```rust
.nest_service("https://example.com", axum_router_operations(...))
```

### エラーメッセージ
`thread 'main' panicked at ...: assertion failed: path.starts_with('/')`

### 推奨される修正
サーバー定義からパス部分（`/api` 等）のみを抽出してマウントに使用するか、絶対 URL の場合は警告を出す等の処理が必要です。

---

## 問題 3: ログ表示におけるダブルスラッシュ

### 現象
`print_axum_router` 関数において、ベースパスが `"/"` の場合に URL 表示が `http://localhost:8080//ui` のようになり、スラッシュが重なります。

### 生成された問題のコード
```rust
pub fn print_axum_router(port:u16){
    println!("http://localhost:{}//ui", port);
}
```

---

## 付録: 再現用データ

### TypeSpec (`main.tsp`)
```typespec
import "@typespec/http";
import "@typespec/openapi3";

using TypeSpec.Http;

@service(#{ title: "Lambda360 API" })
@server("https://example.com", "Main server")
namespace Lambda360;

@route("/hello")
namespace Hello {
  @get op sayHello(): string;
}
```

### OpenAPI (`openapi.json`)
```json
{
  "openapi": "3.0.0",
  "servers": [
    {
      "url": "https://example.com",
      "description": "Main server"
    }
  ],
  "paths": {
    "/hello": {
      "get": {
        "operationId": "Hello_sayHello",
        "responses": { "200": { "description": "OK", "content": { "text/plain": { "schema": { "type": "string" } } } } }
      }
    }
  }
}
```

## 修正後の暫定対応（参考）
利用側では現在、以下のように手動でコードを書き換えて対応しています。
1. `nest_service("/")` を削除し、内部ルーターを直接返却。
2. TypeSpec 側で `@server("/", ...)` と記述。
