From c3ad52b50fa0ee01222719d39e7d7b29a73dc6ad Mon Sep 17 00:00:00 2001 From: rvcas Date: Wed, 22 May 2024 15:35:54 -0400 Subject: [PATCH] feat: add compiler version to aiken.toml --- Cargo.lock | 10 ++++++++++ crates/aiken-project/Cargo.toml | 1 + crates/aiken-project/src/config.rs | 30 ++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index e626e32e..b8aa3c50 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -153,6 +153,7 @@ dependencies = [ "rayon", "regex", "reqwest", + "semver", "serde", "serde_json", "strip-ansi-escapes", @@ -2808,6 +2809,15 @@ dependencies = [ "libc", ] +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +dependencies = [ + "serde", +] + [[package]] name = "serde" version = "1.0.199" diff --git a/crates/aiken-project/Cargo.toml b/crates/aiken-project/Cargo.toml index 99d710a4..6790aac6 100644 --- a/crates/aiken-project/Cargo.toml +++ b/crates/aiken-project/Cargo.toml @@ -48,6 +48,7 @@ cryptoxide = "0.4.4" vec1 = "1.10.1" patricia_tree = "0.8.0" ciborium = "0.2.2" +semver = { version = "1.0.23", features = ["serde"] } [dev-dependencies] blst = "0.3.11" diff --git a/crates/aiken-project/src/config.rs b/crates/aiken-project/src/config.rs index ffc18427..d083bb0c 100644 --- a/crates/aiken-project/src/config.rs +++ b/crates/aiken-project/src/config.rs @@ -2,6 +2,7 @@ use std::{fmt::Display, fs, io, path::Path}; use crate::{github::repo::LatestRelease, package_name::PackageName, paths, Error}; use aiken_lang::ast::Span; +use semver::Version; use miette::NamedSource; use serde::{Deserialize, Serialize}; @@ -12,6 +13,12 @@ pub use aiken_lang::plutus_version::PlutusVersion; pub struct Config { pub name: PackageName, pub version: String, + #[serde( + deserialize_with = "deserialize_version", + serialize_with = "serialize_version", + default = "default_version" + )] + pub compiler: Version, #[serde(default)] pub plutus: PlutusVersion, pub license: Option, @@ -22,6 +29,28 @@ pub struct Config { pub dependencies: Vec, } +fn deserialize_version<'de, D>(deserializer: D) -> Result +where + D: serde::Deserializer<'de>, +{ + let buf = String::deserialize(deserializer)?.replace('v', ""); + + Version::parse(&buf).map_err(serde::de::Error::custom) +} + +fn serialize_version(version: &Version, serializer: S) -> Result +where + S: serde::Serializer, +{ + let version = format!("v{}", version); + + serializer.serialize_str(&version) +} + +fn default_version() -> Version { + Version::parse(built_info::PKG_VERSION).unwrap() +} + #[derive(Deserialize, Serialize, Clone, Debug)] pub struct Repository { pub user: String, @@ -59,6 +88,7 @@ impl Config { Config { name: name.clone(), version: "0.0.0".to_string(), + compiler: default_version(), plutus: PlutusVersion::default(), license: Some("Apache-2.0".to_string()), description: format!("Aiken contracts for project '{name}'"),