mirror of
https://github.com/gpxstudio/gpx.studio.git
synced 2026-11-01 12:17:18 +00:00
97 lines
3.1 KiB
Rust
97 lines
3.1 KiB
Rust
mod apply;
|
|||
|
|
mod edit;
|
||
|
|
mod file;
|
||
|
|
#[cfg(test)]
|
||
|
|
pub(crate) mod fixture;
|
||
|
|
mod pattern;
|
||
|
|
#[cfg(test)]
|
||
|
|
mod routes_tests;
|
||
|
|
mod tools;
|
||
|
|
|
||
|
|
pub use apply::*;
|
||
|
|
pub use edit::*;
|
||
|
|
pub use file::*;
|
||
|
|
pub use pattern::*;
|
||
|
|
pub use tools::*;
|
||
|
|
|
||
|
|
use crate::State;
|
||
|
|
|
||
|
|
/// A user action that edits the files. Each variant wraps the command's own struct, whose
|
||
|
|
/// effect is implemented in its own file (see `Apply`).
|
||
|
|
///
|
||
|
|
/// Bulk data (coordinates, file bytes) is borrowed straight from the wasm-bindgen argument
|
||
|
|
/// buffers, so a command is built without copying; the engine only copies what it keeps.
|
||
|
|
#[derive(Debug)]
|
||
|
|
pub enum Command<'a> {
|
||
|
|
New(New<'a>),
|
||
|
|
Load(Load<'a>),
|
||
|
|
LoadFiles(LoadFiles<'a>),
|
||
|
|
SyncFiles(SyncFiles<'a>),
|
||
|
|
Duplicate(Duplicate),
|
||
|
|
Delete(Delete),
|
||
|
|
Paste(Paste),
|
||
|
|
Move(Move),
|
||
|
|
DeleteAll(DeleteAll),
|
||
|
|
DeleteWaypoint(DeleteWaypoint),
|
||
|
|
Convert(Convert),
|
||
|
|
Metadata(Metadata<'a>),
|
||
|
|
Style(Style<'a>),
|
||
|
|
NewRoute(NewRoute),
|
||
|
|
NewTrack(NewTrack),
|
||
|
|
NewTrackSegment(NewTrackSegment),
|
||
|
|
Reverse(Reverse),
|
||
|
|
RoundTrip(RoundTrip),
|
||
|
|
Reroute(Reroute<'a>),
|
||
|
|
NewWaypoint(NewWaypoint<'a>),
|
||
|
|
EditWaypoint(EditWaypoint<'a>),
|
||
|
|
MoveWaypoint(MoveWaypoint),
|
||
|
|
Crop(Crop),
|
||
|
|
Reduce(Reduce),
|
||
|
|
Split(Split),
|
||
|
|
Time(Time),
|
||
|
|
Merge(Merge),
|
||
|
|
Extract(Extract),
|
||
|
|
InsertAnchor(InsertAnchor),
|
||
|
|
Elevation(Elevation<'a>),
|
||
|
|
Clean(Clean),
|
||
|
|
ChangeLoopStart(ChangeLoopStart),
|
||
|
|
}
|
||
|
|
|
||
|
|
impl Apply for Command<'_> {
|
||
|
|
fn apply(self, state: &mut State) -> Result<(), CommandError> {
|
||
|
|
match self {
|
||
|
|
Command::New(c) => c.apply(state),
|
||
|
|
Command::Load(c) => c.apply(state),
|
||
|
|
Command::LoadFiles(c) => c.apply(state),
|
||
|
|
Command::SyncFiles(c) => c.apply(state),
|
||
|
|
Command::Duplicate(c) => c.apply(state),
|
||
|
|
Command::Delete(c) => c.apply(state),
|
||
|
|
Command::Paste(c) => c.apply(state),
|
||
|
|
Command::Move(c) => c.apply(state),
|
||
|
|
Command::DeleteAll(c) => c.apply(state),
|
||
|
|
Command::DeleteWaypoint(c) => c.apply(state),
|
||
|
|
Command::Convert(c) => c.apply(state),
|
||
|
|
Command::Metadata(c) => c.apply(state),
|
||
|
|
Command::Style(c) => c.apply(state),
|
||
|
|
Command::NewRoute(c) => c.apply(state),
|
||
|
|
Command::NewTrack(c) => c.apply(state),
|
||
|
|
Command::NewTrackSegment(c) => c.apply(state),
|
||
|
|
Command::Reverse(c) => c.apply(state),
|
||
|
|
Command::RoundTrip(c) => c.apply(state),
|
||
|
|
Command::Reroute(c) => c.apply(state),
|
||
|
|
Command::NewWaypoint(c) => c.apply(state),
|
||
|
|
Command::EditWaypoint(c) => c.apply(state),
|
||
|
|
Command::MoveWaypoint(c) => c.apply(state),
|
||
|
|
Command::Crop(c) => c.apply(state),
|
||
|
|
Command::Reduce(c) => c.apply(state),
|
||
|
|
Command::Split(c) => c.apply(state),
|
||
|
|
Command::Time(c) => c.apply(state),
|
||
|
|
Command::Merge(c) => c.apply(state),
|
||
|
|
Command::Extract(c) => c.apply(state),
|
||
|
|
Command::InsertAnchor(c) => c.apply(state),
|
||
|
|
Command::Elevation(c) => c.apply(state),
|
||
|
|
Command::Clean(c) => c.apply(state),
|
||
|
|
Command::ChangeLoopStart(c) => c.apply(state),
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|