feat: add compiler version to aiken.toml

This commit is contained in:
rvcas 2024-05-22 15:35:54 -04:00
parent d6cc450ce4
commit c3ad52b50f
No known key found for this signature in database
GPG Key ID: C09B64E263F7D68C
3 changed files with 41 additions and 0 deletions

10
Cargo.lock generated vendored
View File

@ -153,6 +153,7 @@ dependencies = [
"rayon", "rayon",
"regex", "regex",
"reqwest", "reqwest",
"semver",
"serde", "serde",
"serde_json", "serde_json",
"strip-ansi-escapes", "strip-ansi-escapes",
@ -2808,6 +2809,15 @@ dependencies = [
"libc", "libc",
] ]
[[package]]
name = "semver"
version = "1.0.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b"
dependencies = [
"serde",
]
[[package]] [[package]]
name = "serde" name = "serde"
version = "1.0.199" version = "1.0.199"

View File

@ -48,6 +48,7 @@ cryptoxide = "0.4.4"
vec1 = "1.10.1" vec1 = "1.10.1"
patricia_tree = "0.8.0" patricia_tree = "0.8.0"
ciborium = "0.2.2" ciborium = "0.2.2"
semver = { version = "1.0.23", features = ["serde"] }
[dev-dependencies] [dev-dependencies]
blst = "0.3.11" blst = "0.3.11"

View File

@ -2,6 +2,7 @@ use std::{fmt::Display, fs, io, path::Path};
use crate::{github::repo::LatestRelease, package_name::PackageName, paths, Error}; use crate::{github::repo::LatestRelease, package_name::PackageName, paths, Error};
use aiken_lang::ast::Span; use aiken_lang::ast::Span;
use semver::Version;
use miette::NamedSource; use miette::NamedSource;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
@ -12,6 +13,12 @@ pub use aiken_lang::plutus_version::PlutusVersion;
pub struct Config { pub struct Config {
pub name: PackageName, pub name: PackageName,
pub version: String, pub version: String,
#[serde(
deserialize_with = "deserialize_version",
serialize_with = "serialize_version",
default = "default_version"
)]
pub compiler: Version,
#[serde(default)] #[serde(default)]
pub plutus: PlutusVersion, pub plutus: PlutusVersion,
pub license: Option<String>, pub license: Option<String>,
@ -22,6 +29,28 @@ pub struct Config {
pub dependencies: Vec<Dependency>, pub dependencies: Vec<Dependency>,
} }
fn deserialize_version<'de, D>(deserializer: D) -> Result<Version, D::Error>
where
D: serde::Deserializer<'de>,
{
let buf = String::deserialize(deserializer)?.replace('v', "");
Version::parse(&buf).map_err(serde::de::Error::custom)
}
fn serialize_version<S>(version: &Version, serializer: S) -> Result<S::Ok, S::Error>
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)] #[derive(Deserialize, Serialize, Clone, Debug)]
pub struct Repository { pub struct Repository {
pub user: String, pub user: String,
@ -59,6 +88,7 @@ impl Config {
Config { Config {
name: name.clone(), name: name.clone(),
version: "0.0.0".to_string(), version: "0.0.0".to_string(),
compiler: default_version(),
plutus: PlutusVersion::default(), plutus: PlutusVersion::default(),
license: Some("Apache-2.0".to_string()), license: Some("Apache-2.0".to_string()),
description: format!("Aiken contracts for project '{name}'"), description: format!("Aiken contracts for project '{name}'"),