Rust 크레이트를 루트로 이동

맥락:
- GUI 이식 전에 Rust crate와 proto schema 위치를 Python package 내부에서 분리한다.
- Cargo 작업, IDE 인식, 빌드 산출물 관리를 루트 구조에 맞춘다.

변경:
- rust_core를 rust/lost-cities-core로 이동하고 proto/lost_cities.proto를 루트 proto 디렉터리로 옮겼다.
- Rust build.rs, Python Rust backend, Rust parity 테스트의 경로를 새 위치로 수정했다.
- Python package-data에서 Rust crate와 proto 항목을 제거하고 README/port notes를 갱신했다.

확인:
- uv sync --extra gui --reinstall-package coolrl-lost-cities
- uv run pytest tests/games/classic
- uv run lost-cities-classic
This commit is contained in:
2026-05-06 19:50:32 +09:00
parent 73fe7e2c94
commit b43bb5917f
16 changed files with 15 additions and 11 deletions
+7
View File
@@ -50,4 +50,11 @@ backend = build_backend("python", classic_config(), seed=1)
snapshot = backend.snapshot() snapshot = backend.snapshot()
``` ```
Rust sources live outside the Python package:
```text
rust/lost-cities-core/
proto/lost_cities.proto
```
See [classic port notes](docs/classic-port-notes.md) for the current direction. See [classic port notes](docs/classic-port-notes.md) for the current direction.
+4 -1
View File
@@ -30,7 +30,10 @@ src/coolrl_lost_cities/
fixtures/ fixtures/
assets/ assets/
docs/ docs/
rust_core/ rust/
lost-cities-core/
proto/
lost_cities.proto
``` ```
Tests should live outside the package, roughly under: Tests should live outside the package, roughly under:
-6
View File
@@ -39,10 +39,4 @@ include = ["coolrl_lost_cities*"]
"assets/*.json", "assets/*.json",
"fixtures/*.json", "fixtures/*.json",
"docs/*.md", "docs/*.md",
"schemas/*.proto",
"rust_core/Cargo.lock",
"rust_core/Cargo.toml",
"rust_core/build.rs",
"rust_core/src/*.rs",
"rust_core/src/bin/*.rs",
] ]
@@ -4,7 +4,7 @@ fn main() {
let protoc = protoc_bin_vendored::protoc_bin_path().expect("vendored protoc"); let protoc = protoc_bin_vendored::protoc_bin_path().expect("vendored protoc");
std::env::set_var("PROTOC", protoc); std::env::set_var("PROTOC", protoc);
let proto_dir = PathBuf::from("../schemas"); let proto_dir = PathBuf::from("../../proto");
let proto_file = proto_dir.join("lost_cities.proto"); let proto_file = proto_dir.join("lost_cities.proto");
println!("cargo:rerun-if-changed={}", proto_file.display()); println!("cargo:rerun-if-changed={}", proto_file.display());
@@ -12,6 +12,7 @@ from ..interfaces import BackendName, Snapshot
from .common import snapshot_from_trace, snapshot_summary from .common import snapshot_from_trace, snapshot_summary
LOGGER = logging.getLogger("coolrl_lost_cities.games.classic.backends.rust") LOGGER = logging.getLogger("coolrl_lost_cities.games.classic.backends.rust")
RUST_CORE_DIR = Path(__file__).resolve().parents[5] / "rust" / "lost-cities-core"
class RustLostCitiesBackend: class RustLostCitiesBackend:
@@ -70,7 +71,6 @@ class RustLostCitiesBackend:
"steps": [{"action": None}] "steps": [{"action": None}]
+ [{"action": action} for action in self.actions], + [{"action": action} for action in self.actions],
} }
rust_core = Path(__file__).resolve().parents[1] / "rust_core"
with tempfile.NamedTemporaryFile("w", suffix=".json", delete=False) as handle: with tempfile.NamedTemporaryFile("w", suffix=".json", delete=False) as handle:
json.dump(fixture, handle) json.dump(fixture, handle)
fixture_path = Path(handle.name) fixture_path = Path(handle.name)
@@ -86,7 +86,7 @@ class RustLostCitiesBackend:
"trace", "trace",
str(fixture_path), str(fixture_path),
], ],
cwd=rust_core, cwd=RUST_CORE_DIR,
check=True, check=True,
text=True, text=True,
capture_output=True, capture_output=True,
+1 -1
View File
@@ -5,11 +5,11 @@ import subprocess
import coolrl_lost_cities.games.classic as classic import coolrl_lost_cities.games.classic as classic
from coolrl_lost_cities.games.classic.game import GameState, LostCitiesConfig, build_deck from coolrl_lost_cities.games.classic.game import GameState, LostCitiesConfig, build_deck
from coolrl_lost_cities.games.classic.backends.rust import RUST_CORE_DIR
LOST_CITIES_DIR = Path(classic.__file__).resolve().parent LOST_CITIES_DIR = Path(classic.__file__).resolve().parent
FIXTURE_DIR = LOST_CITIES_DIR / "fixtures" FIXTURE_DIR = LOST_CITIES_DIR / "fixtures"
RUST_CORE_DIR = LOST_CITIES_DIR / "rust_core"
def _run_probe(*args: str) -> dict: def _run_probe(*args: str) -> dict: