Integrate release recovery, semantic review, coverage and Windows packaging
This commit is contained in:
@@ -12,7 +12,7 @@ pub(crate) use direct::{
|
||||
#[cfg(test)]
|
||||
pub(crate) mod direct_tests;
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
|
||||
pub enum Tool {
|
||||
Work,
|
||||
Exchange,
|
||||
@@ -76,12 +76,16 @@ pub struct State {
|
||||
zoom: Option<f32>,
|
||||
fit: bool,
|
||||
}
|
||||
#[derive(Default)]
|
||||
#[derive(Default, serde::Serialize, serde::Deserialize)]
|
||||
#[serde(deny_unknown_fields)]
|
||||
struct Browser {
|
||||
search: String,
|
||||
page: usize,
|
||||
}
|
||||
#[derive(serde::Serialize, serde::Deserialize)]
|
||||
#[serde(deny_unknown_fields)]
|
||||
struct Draft {
|
||||
#[serde(with = "recovery_insertion")]
|
||||
insertion: Insertion,
|
||||
fixed: bool,
|
||||
browsers: [Browser; 4],
|
||||
@@ -97,6 +101,22 @@ struct Draft {
|
||||
control: ControlKind,
|
||||
}
|
||||
impl State {
|
||||
pub(super) fn recovery_snapshot(&self) -> Result<Option<serde_json::Value>, String> {
|
||||
self.draft
|
||||
.as_ref()
|
||||
.map(serde_json::to_value)
|
||||
.transpose()
|
||||
.map_err(|e| e.to_string())
|
||||
}
|
||||
|
||||
pub(super) fn from_recovery(value: serde_json::Value) -> Result<Self, String> {
|
||||
let draft = serde_json::from_value(value).map_err(|e| e.to_string())?;
|
||||
Ok(Self {
|
||||
draft: Some(draft),
|
||||
..Default::default()
|
||||
})
|
||||
}
|
||||
|
||||
pub(super) fn pending_owner(&self) -> Option<Id> {
|
||||
self.draft.as_ref().map(|d| d.owner)
|
||||
}
|
||||
@@ -198,6 +218,23 @@ impl State {
|
||||
.clamp(0.05, 1.)
|
||||
}
|
||||
}
|
||||
|
||||
mod recovery_insertion {
|
||||
use super::*;
|
||||
use serde::{Deserialize, Serialize};
|
||||
pub fn serialize<S: serde::Serializer>(
|
||||
value: &Insertion,
|
||||
serializer: S,
|
||||
) -> Result<S::Ok, S::Error> {
|
||||
(value.link, value.before).serialize(serializer)
|
||||
}
|
||||
pub fn deserialize<'de, D: serde::Deserializer<'de>>(
|
||||
deserializer: D,
|
||||
) -> Result<Insertion, D::Error> {
|
||||
let (link, before) = <(Option<Id>, Option<Id>)>::deserialize(deserializer)?;
|
||||
Ok(Insertion { link, before })
|
||||
}
|
||||
}
|
||||
fn is_contribution(p: &Project, owner: Id, id: Id) -> bool {
|
||||
p.elements.get(&id).is_some_and(|e| {
|
||||
e.parent == Some(owner)
|
||||
|
||||
Reference in New Issue
Block a user