2017-02-11 35 views
9

Tôi muốn xác định giá trị không đổi bằng cách sử dụng một tập tin cấu hình JSON, một cái gì đó như thế này:Macro Rust có thể phân tích cú pháp JSON không?

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

Có cách nào để phân tích JSON tại thời gian biên dịch?

+0

Xin lỗi, tôi nhận thấy rằng tôi đã nhầm định nghĩa enum, vì vậy đã sửa đổi định nghĩa. – kriw

+0

Tốt! Sau đó tôi nghĩ phương pháp 'build.rs' là khả thi. Cô lập định nghĩa này trong tập tin nhỏ nhất có thể và bạn tốt để đi. –

Trả lời

8

Có nhiều cách để phân tích cú pháp json tại thời gian biên dịch. Để "tham gia":

  • để tạo mã nguồn trong khi xây dựng; đó là kỹ thuật gian lận, tất nhiên, nhưng thật dễ dàng,
  • sử dụng một hàm const kết hợp với include_str!, nó sẽ đòi hỏi hàng đêm và tôi không chắc liệu động cơ thời gian biên dịch là đủ mạnh tại thời điểm hiện tại,
  • viết một trình biên dịch plugin, đó là những gì include_str! là, nó cũng đòi hỏi hàng đêm và giao diện có thể thay đổi với mỗi bản phát hành của trình biên dịch.

Vì vậy, tôi khuyên bạn nên sử dụng phương pháp tiếp cận tập lệnh build.rs ngay bây giờ vì nó đơn giản và ổn định.

Các vấn đề liên quan