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",
"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"

View File

@ -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"

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 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<String>,
@ -22,6 +29,28 @@ pub struct Config {
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)]
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}'"),