Last active
January 4, 2025 20:52
-
-
Save JosiahParry/1d3d8bbbda340f1502451fb0fdb5f5f4 to your computer and use it in GitHub Desktop.
{renv} reader and writer in Rust
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use serde::{Deserialize, Serialize}; | |
use std::collections::HashMap; | |
use std::fs::File; | |
use std::io::BufReader; | |
use std::path::Path; | |
#[derive(Debug, Clone, Serialize, Deserialize)] | |
#[serde(rename_all = "PascalCase")] | |
pub struct RenvLock { | |
pub r: RenvRVersion, | |
// Note that each apckage should be untagged | |
pub packages: HashMap<String, RenvPackage>, | |
} | |
#[derive(Debug, Clone, Serialize, Deserialize)] | |
#[serde(rename_all = "PascalCase")] | |
pub struct RenvRVersion { | |
pub version: String, | |
pub repositories: Vec<RenvRepository>, | |
} | |
#[derive(Debug, Clone, Serialize, Deserialize)] | |
pub struct RenvRepository { | |
#[serde(rename = "Name")] | |
pub name: Option<String>, | |
#[serde(rename = "URL")] | |
pub url: String, | |
} | |
#[derive(Debug, Clone, Serialize, Deserialize)] | |
#[serde(rename_all = "PascalCase")] | |
pub struct RenvPackage { | |
pub package: String, | |
pub version: String, | |
pub source: String, | |
pub repository: String, | |
pub requirements: Option<Vec<String>>, | |
pub hash: String, | |
} | |
impl RenvLock { | |
pub fn read<P: AsRef<Path>>(path: P) -> anyhow::Result<Self> { | |
let file = File::open(path.as_ref())?; | |
let reader = BufReader::new(file); | |
let renv_lock: RenvLock = serde_json::from_reader(reader)?; | |
Ok(renv_lock) | |
} | |
pub fn write<P: AsRef<Path>>(&self, path: P) -> anyhow::Result<()> { | |
let f = std::fs::File::create(&path)?; | |
serde_json::to_writer_pretty(&f, self)?; | |
Ok(()) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment