2017-02-11 1 views
9

Ich möchte konstante Werte definieren, indem eine JSON-Konfigurationsdatei, so etwas wie dies mit:Können Rust-Makros JSON parsen?

enum E { 
    ONE = get!(include_json!("a.json"), 0), 
    TWO = get!(include_json!("a.json"), 1), 
} 

Gibt es eine Möglichkeit JSON zur Compile-Zeit zu analysieren?

+0

Entschuldigung, ich bemerkte, dass ich die Definition der Enumeration verwechselte, so änderte die Definition. – kriw

+0

Gut! Dann halte ich den Ansatz "build.rs" für machbar. Isolieren Sie diese Definition in der kleinsten möglichen Datei und Sie sind gut zu gehen. –

Antwort

8

Es gibt mehrere Möglichkeiten, Json zur Kompilierzeit zu analysieren. In Reihenfolge der "Beteiligung":

  • mit der build.rs script, um Ihren Quellcode während des Builds zu generieren; es ist technisch betrügt, natürlich, aber es ist leicht,
  • eine const Funktion in Kombination mit den include_str! verwenden, würde es erfordert jede Nacht, und ich bin nicht sicher, ob der Kompilierung-Motor stark genug, um zu der Zeit zu sein,
  • Schreiben eines Compiler-Plugins, das ist include_str! ist, erfordert es auch nächtliche und die Schnittstelle kann mit jeder Version des Compilers ändern.
  • Daher würde ich Ihnen raten, den build.rs Skriptansatz für jetzt zu verwenden, da es sowohl einfach als auch stabil ist.