feat(types): add Serialize/Deserialize derives to all types.rs

Add the serde 'twins' (Serialize + Deserialize) to every public struct
and enum in src/*/types.rs so data types can be serialized via JSON,
bincode, postcard, etc.

Dependency changes:
- enable 'serde' feature on gix (for gix::ObjectId)
- enable 'serde' feature on time (for time::OffsetDateTime)

Skipped:
- src/archive/types.rs::ChildArchiveReader<R> — contains a
  tokio::process::Child field, semantically not serializable

Coverage (18 modules):
archive, blame, blob, branch, cleanup, commit, compare, config,
conflict, diff, merge, refs, remote, setup, submodule, tags, tree

Notes:
- field names kept snake_case (no rename_all remap)
- existing PartialEq / Eq / Default / Copy derives preserved
- cargo build + cargo test (38 passed) green
This commit is contained in:
zhenyi 2026-08-14 17:25:09 +08:00
parent 680411c4fb
commit 916b5f3176
20 changed files with 146 additions and 76 deletions

47
Cargo.lock generated
View File

@ -69,6 +69,9 @@ name = "bitflags"
version = "2.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da"
dependencies = [
"serde_core",
]
[[package]]
name = "block-buffer"
@ -216,6 +219,9 @@ name = "deranged"
version = "0.5.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c"
dependencies = [
"serde_core",
]
[[package]]
name = "digest"
@ -376,6 +382,7 @@ dependencies = [
"gix-submodule",
"gix-tempfile",
"gix-trace",
"gix-transport",
"gix-traverse",
"gix-url",
"gix-utils",
@ -387,6 +394,7 @@ dependencies = [
"nonempty",
"parking_lot",
"regex",
"serde",
"signal-hook",
"smallvec",
"thiserror",
@ -401,6 +409,7 @@ dependencies = [
"bstr",
"gix-date",
"gix-error",
"serde",
]
[[package]]
@ -428,6 +437,7 @@ dependencies = [
"gix-path",
"gix-quote",
"gix-trace",
"serde",
"smallvec",
"thiserror",
"unicode-bom",
@ -496,6 +506,7 @@ dependencies = [
"gix-hash",
"memmap2",
"nonempty",
"serde",
]
[[package]]
@ -546,6 +557,7 @@ dependencies = [
"gix-sec",
"gix-trace",
"gix-url",
"serde",
"thiserror",
]
@ -559,6 +571,7 @@ dependencies = [
"gix-error",
"itoa",
"jiff",
"serde",
]
[[package]]
@ -693,6 +706,7 @@ dependencies = [
"bstr",
"gix-features",
"gix-path",
"serde",
]
[[package]]
@ -703,6 +717,7 @@ checksum = "13adaa73415fd6c902310923f68d0b98e8cecf14b33ea58c02cc387cee56f54e"
dependencies = [
"faster-hex",
"gix-features",
"serde",
"sha1-checked",
"thiserror",
]
@ -728,6 +743,7 @@ dependencies = [
"gix-glob",
"gix-path",
"gix-trace",
"serde",
"unicode-bom",
]
@ -765,6 +781,7 @@ dependencies = [
"libc",
"memmap2",
"rustix",
"serde",
"smallvec",
"thiserror",
]
@ -790,6 +807,7 @@ dependencies = [
"gix-actor",
"gix-date",
"gix-error",
"serde",
]
[[package]]
@ -821,6 +839,7 @@ dependencies = [
"gix-utils",
"gix-validate",
"itoa",
"serde",
"smallvec",
"thiserror",
]
@ -843,6 +862,7 @@ dependencies = [
"gix-zlib",
"memmap2",
"parking_lot",
"serde",
"tempfile",
"thiserror",
]
@ -863,6 +883,7 @@ dependencies = [
"gix-path",
"gix-zlib",
"memmap2",
"serde",
"smallvec",
"thiserror",
"uluru",
@ -936,6 +957,7 @@ dependencies = [
"gix-transport",
"gix-utils",
"nonempty",
"serde",
"thiserror",
]
@ -967,6 +989,7 @@ dependencies = [
"gix-utils",
"gix-validate",
"memmap2",
"serde",
"thiserror",
]
@ -1003,6 +1026,7 @@ dependencies = [
"gix-revwalk",
"gix-trace",
"nonempty",
"serde",
]
[[package]]
@ -1030,6 +1054,7 @@ dependencies = [
"bitflags 2.13.1",
"gix-path",
"libc",
"serde",
"windows-sys",
]
@ -1043,6 +1068,7 @@ dependencies = [
"gix-hash",
"gix-lock",
"nonempty",
"serde",
"thiserror",
]
@ -1121,6 +1147,7 @@ dependencies = [
"gix-quote",
"gix-sec",
"gix-url",
"serde",
"thiserror",
]
@ -1151,6 +1178,7 @@ dependencies = [
"gix-path",
"gix-utils",
"percent-encoding",
"serde",
"thiserror",
]
@ -1192,6 +1220,7 @@ dependencies = [
"gix-object",
"gix-path",
"gix-validate",
"serde",
]
[[package]]
@ -1236,6 +1265,7 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3e8813f5579b3075ff9c90f7c59cd2b62b4ebb639361f0911648b22d7446cc7c"
dependencies = [
"serde",
"thiserror",
"zlib-rs",
]
@ -1420,6 +1450,9 @@ name = "nonempty"
version = "0.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9737e026353e5cd0736f98eddae28665118eb6f6600902a7f50db585621fecb6"
dependencies = [
"serde",
]
[[package]]
name = "num-conv"
@ -1691,6 +1724,9 @@ name = "smallvec"
version = "1.15.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90"
dependencies = [
"serde",
]
[[package]]
name = "stable_deref_trait"
@ -1764,6 +1800,7 @@ dependencies = [
"powerfmt",
"serde_core",
"time-core",
"time-macros",
]
[[package]]
@ -1772,6 +1809,16 @@ version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109"
[[package]]
name = "time-macros"
version = "0.2.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85"
dependencies = [
"num-conv",
"time-core",
]
[[package]]
name = "tinyvec"
version = "1.12.0"

View File

@ -7,6 +7,6 @@ edition = "2024"
tokio = { version = "1.53.1", features = ["process", "io-util", "sync", "macros", "rt-multi-thread", "time", "fs"] }
serde = { version = "1.0.229", features = ["derive"] }
serde_json = { version = "1.0.151", features = [] }
gix = { version = "0.86.0", features = [] }
time = { version = "0.3.55", features = [] }
gix = { version = "0.86.0", features = ["serde"] }
time = { version = "0.3.55", features = ["serde"] }
async-trait = "0.1.92"

View File

@ -1,9 +1,10 @@
use std::fmt;
use serde::{Deserialize, Serialize};
use crate::command::env::Env;
use crate::error::BabyError;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum ArchiveFormat {
Tar,
TarGz,
@ -33,7 +34,7 @@ impl fmt::Display for ArchiveFormat {
}
}
#[derive(Debug, Clone)]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CreateArchiveRequest {
pub commit: String,
pub format: ArchiveFormat,
@ -41,7 +42,7 @@ pub struct CreateArchiveRequest {
pub paths: Vec<String>,
}
#[derive(Debug, Clone)]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GetArchiveRequest {
pub commit: String,
pub format: ArchiveFormat,
@ -50,7 +51,7 @@ pub struct GetArchiveRequest {
pub exclude: Vec<String>,
}
#[derive(Debug, Clone)]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BundleRequest {
pub refs: Vec<String>,
}

View File

@ -1,7 +1,8 @@
use std::fmt;
use std::path::PathBuf;
#[derive(Debug, Clone, PartialEq, Eq)]
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct BlameHunk {
pub sha: gix::ObjectId,
pub previous_sha: Option<gix::ObjectId>,
@ -12,7 +13,7 @@ pub struct BlameHunk {
pub orig_start_line: u32,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub struct Range {
pub start: u32,
pub end: u32,
@ -24,7 +25,7 @@ impl fmt::Display for Range {
}
}
#[derive(Debug, Clone)]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BlameOptions {
pub revision: String,
pub path: PathBuf,

View File

@ -1,19 +1,20 @@
use gix::ObjectId;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct BlobInfo {
pub oid: ObjectId,
pub size: i64,
pub data: Option<Vec<u8>>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct BlobContent {
pub info: BlobInfo,
pub data: Vec<u8>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct LFSPointer {
pub oid: ObjectId,
pub size: i64,
@ -22,12 +23,12 @@ pub struct LFSPointer {
pub content: Vec<u8>,
}
#[derive(Debug, Clone, Default)]
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct GetBlobOptions {
pub limit: Option<i64>,
}
#[derive(Debug, Clone, Default)]
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ListBlobsOptions {
pub revisions: Vec<String>,
pub limit: Option<u32>,
@ -35,29 +36,29 @@ pub struct ListBlobsOptions {
pub with_paths: bool,
}
#[derive(Debug, Clone, Default)]
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ListAllBlobsOptions {
pub limit: Option<u32>,
pub bytes_limit: Option<i64>,
}
#[derive(Debug, Clone, Default)]
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ListLFSPointersOptions {
pub revisions: Vec<String>,
pub limit: Option<u32>,
}
#[derive(Debug, Clone, Default)]
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ListAllLFSPointersOptions {
pub limit: Option<u32>,
}
#[derive(Debug, Clone, Default)]
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct GetLFSPointersOptions {
pub blob_ids: Vec<ObjectId>,
}
#[derive(Debug, Clone, Default)]
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct WriteBlobOptions {
pub path: Option<String>,
}

View File

@ -1,17 +1,17 @@
use gix::ObjectId;
#[derive(Debug, Clone, PartialEq, Eq)]
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct BranchInfo {
pub name: String,
pub sha: ObjectId,
}
#[derive(Debug, Clone, Default)]
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ListBranchesOptions {
pub patterns: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum HeadTarget {
Branch(String),
Detached(ObjectId),

0
src/cache/mod.rs vendored Normal file
View File

View File

@ -1,9 +1,11 @@
#[derive(Debug, Clone, Default)]
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PruneResult {
pub packed_refs: u64,
}
#[derive(Debug, Clone, Default)]
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CleanupStats {
pub removed_internal_refs: u64,
}

View File

@ -1,7 +1,9 @@
use std::fmt;
use std::path::PathBuf;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum TreeEntryMode {
Blob,
Exec,
@ -43,14 +45,14 @@ impl fmt::Display for TreeEntryMode {
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Signature {
pub name: String,
pub email: String,
pub time: time::OffsetDateTime,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct CommitInfo {
pub id: gix::ObjectId,
pub tree_id: gix::ObjectId,
@ -61,13 +63,13 @@ pub struct CommitInfo {
pub gpg_signature: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize)]
pub struct CommitStats {
pub additions: u64,
pub deletions: u64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct TreeEntry {
pub oid: gix::ObjectId,
pub name: String,
@ -75,7 +77,7 @@ pub struct TreeEntry {
pub size: Option<u64>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct ListCommitsOptions {
pub revision: String,
pub path: Option<PathBuf>,

View File

@ -1,6 +1,8 @@
use std::fmt;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub struct DivergeObject {
pub ahead: u32,
pub behind: u32,

View File

@ -1,6 +1,8 @@
use std::fmt;
#[derive(Debug, Clone, PartialEq, Eq)]
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct ConfigEntry {
pub key: String,
pub value: String,
@ -12,7 +14,7 @@ impl fmt::Display for ConfigEntry {
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct ConfigScope(pub String);
impl ConfigScope {

View File

@ -1,17 +1,18 @@
use std::path::PathBuf;
use gix::ObjectId;
use serde::{Deserialize, Serialize};
use crate::commit::types::Signature;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum MergeStage {
Ancestor,
Ours,
Theirs,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct ConflictFileHeader {
pub our_commit_oid: ObjectId,
pub their_path: Option<PathBuf>,
@ -20,26 +21,26 @@ pub struct ConflictFileHeader {
pub our_mode: u32,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct ConflictFile {
pub header: ConflictFileHeader,
pub content: Option<String>,
}
#[derive(Debug, Default, Clone)]
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
pub struct ListConflictOptions {
pub allow_tree_conflicts: bool,
pub skip_content: bool,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct MergeTreeResult {
pub tree_oid: ObjectId,
pub has_conflicts: bool,
pub conflict_files: Vec<PathBuf>,
}
#[derive(Debug, Clone)]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResolveConflictsInput {
pub our_commit_oid: ObjectId,
pub their_commit_oid: ObjectId,
@ -49,7 +50,7 @@ pub struct ResolveConflictsInput {
pub author: Signature,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct ConflictResolution {
pub old_path: Option<PathBuf>,
pub new_path: PathBuf,

View File

@ -1,14 +1,15 @@
use std::path::PathBuf;
use gix::ObjectId;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct DiffRequest {
pub left: ObjectId,
pub right: ObjectId,
}
#[derive(Debug, Default, Clone)]
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
pub struct DiffOptions {
pub paths: Option<Vec<PathBuf>>,
pub ignore_whitespace: Option<WhitespaceMode>,
@ -16,14 +17,14 @@ pub struct DiffOptions {
pub word_diff: bool,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum WhitespaceMode {
None,
IgnoreSpaceChange,
IgnoreAllSpace,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum DiffStatus {
Added,
Deleted,
@ -47,7 +48,7 @@ impl DiffStatus {
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct ChangedPath {
pub old_path: Option<PathBuf>,
pub new_path: PathBuf,
@ -58,7 +59,7 @@ pub struct ChangedPath {
pub status: DiffStatus,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct ChangedPathDiff {
pub path: ChangedPath,
pub lines_added: u64,
@ -67,7 +68,7 @@ pub struct ChangedPathDiff {
pub patch: Option<Vec<u8>>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct NumStat {
pub additions: u64,
pub deletions: u64,
@ -75,20 +76,20 @@ pub struct NumStat {
pub old_path: Option<PathBuf>,
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)]
pub struct ShortStat {
pub files_changed: u64,
pub additions: u64,
pub deletions: u64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ChangedPathRequest {
Commit(ObjectId),
TreePair(ObjectId, ObjectId),
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum RangeDiffSpec {
Range(String, String),
RevisionRange(String, String),

View File

@ -1,6 +1,7 @@
use gix::ObjectId;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct MergeBaseResult {
pub oid: ObjectId,
}

View File

@ -1,6 +1,7 @@
use gix::ObjectId;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum RefType {
Branch,
Tag,
@ -8,7 +9,7 @@ pub enum RefType {
Other,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct RefInfo {
pub name: String,
pub ref_type: RefType,
@ -16,7 +17,7 @@ pub struct RefInfo {
pub peeled: Option<ObjectId>,
}
#[derive(Debug, Clone, Default)]
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ListRefsOptions {
pub patterns: Vec<String>,
pub exclude_patterns: Vec<String>,
@ -25,7 +26,7 @@ pub struct ListRefsOptions {
pub start_after: Option<String>,
}
#[derive(Debug, Clone)]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RefUpdate {
pub name: String,
pub new_sha: ObjectId,

View File

@ -1,4 +1,6 @@
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize)]
pub enum RemoteOption {
#[default]
Default,
@ -16,7 +18,7 @@ impl RemoteOption {
}
}
#[derive(Debug, Clone)]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UpdateRemoteMirrorRequest {
pub url: String,
pub refs: Vec<String>,
@ -24,12 +26,12 @@ pub struct UpdateRemoteMirrorRequest {
pub keep_divergent_refs: bool,
}
#[derive(Debug, Clone, Default)]
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct UpdateRemoteMirrorResult {
pub divergent_refs: Vec<String>,
}
#[derive(Debug, Clone, Default)]
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct FetchRemoteCommitResult {
pub fetched: bool,
}

View File

@ -1,4 +1,6 @@
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum ObjectFormat {
Sha1,
Sha256,
@ -13,14 +15,14 @@ impl ObjectFormat {
}
}
#[derive(Debug, Clone, Default)]
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct FastImportFile {
pub mode: Option<u32>,
pub path: String,
pub content: Vec<u8>,
}
#[derive(Debug, Clone)]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FastImportCommit {
pub ref_name: String,
pub message: Option<String>,

View File

@ -1,4 +1,6 @@
#[derive(Debug, Clone, PartialEq, Eq, Default)]
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)]
pub struct SubModule {
pub name: String,
pub path: String,

View File

@ -1,25 +1,26 @@
use gix::ObjectId;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum SigningFormat {
Ssh,
OpenGpg,
X509,
}
#[derive(Debug, Clone)]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SigningKey {
pub format: SigningFormat,
pub key_id: String,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum TagType {
Lightweight,
Annotated,
}
#[derive(Debug, Clone)]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TagInfo {
pub name: String,
pub sha: ObjectId,
@ -29,19 +30,19 @@ pub struct TagInfo {
pub message: Option<String>,
}
#[derive(Debug, Clone)]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CreateTagOptions {
pub name: String,
pub target: String,
pub message: Option<String>,
}
#[derive(Debug, Clone, Default)]
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ListTagsOptions {
pub patterns: Vec<String>,
}
#[derive(Debug, Clone)]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TagVerifyResult {
pub valid: bool,
pub signer: Option<String>,

View File

@ -1,9 +1,10 @@
use gix::ObjectId;
use std::path::PathBuf;
use serde::{Deserialize, Serialize};
use crate::commit::types::TreeEntryMode;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum TreeDiffStatus {
Added,
Deleted,
@ -13,7 +14,7 @@ pub enum TreeDiffStatus {
Copied,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct TreeDiff {
pub old_path: Option<PathBuf>,
pub new_path: Option<PathBuf>,
@ -24,13 +25,13 @@ pub struct TreeDiff {
pub status: TreeDiffStatus,
}
#[derive(Debug, Clone, Default)]
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct WalkTreeOptions {
pub recurse: bool,
pub show_trees: bool,
}
#[derive(Debug, Clone, Default)]
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DiffTreesOptions {
pub recurse: bool,
pub detect_renames: bool,