"serde는 다리 위에 서 있는 통역이야. Rust struct를 JSON으로, 다시 거꾸로 — 파싱 코드는 한 줄도 안 짜게 해줘."
derive만 붙이고 잊어버려
IPC 다리를 건너는 건 뭐든 평범한 데이터가 돼야 해. Rust에서 그 일을 맡는 크레이트가 serde야. struct나 enum에 #[derive(Serialize, Deserialize)]를 붙이면 serde가 변환 코드를 만들어줘. Serialize는 프론트엔드로 나가는 길(command 반환값), Deserialize는 프론트엔드에서 들어오는 길(command 인자)을 맡아. JSON을 손으로 조립할 일은 이제 영영 없어.
struct는 양쪽으로 다녀
command는 struct를 받을 수도, 돌려줄 수도 있어. 프론트엔드가 평범한 객체를 보내면 네 Rust struct로 풀리고, command가 struct를 돌려주면 웹뷰가 받을 평범한 객체로 다시 접혀. 풍성한 데이터가 깔끔하게 건너는 방식이 이거야 — 양쪽 끝에선 타입의 모양으로 생각하고, 중간에서 오가는 포맷은 serde가 알아서 해.
필드 이름을 프론트엔드에 맞춰
Rust struct는 snake_case 필드(created_at)를 쓰는데, 네 TypeScript는 아마 camelCase(createdAt)를 원할 거야. struct에 #[serde(rename_all = "camelCase")]를 붙이면 serde가 오갈 때 필드 이름을 전부 바꿔줘. 그럼 Rust는 Rust답게 남고 프론트엔드는 기대하던 표기를 받아 — 인자 관례랑 똑같은 철학을 데이터 모양에 적용한 거야.