pub struct VersionedFileService { /* private fields */ }Expand description
Service for managing versioned files with Git version control.
VersionedFileService provides high-level operations for working with Git repositories
in VPR’s patient record system. It handles atomic file write and commit operations with
automatic rollback on failure, ensuring data consistency and integrity.
The service supports both signed commits (using ECDSA P-256 with X.509 certificates)
and unsigned commits. All commits use structured [VprCommitMessage] format for
consistency and auditability.
§Core Capabilities
- Atomic Operations: Write multiple files and commit in a single transaction
- Automatic Rollback: Restore previous state if any operation fails
- Directory Creation: Automatically create parent directories as needed
- Signed Commits: Optional cryptographic signing with X.509 certificates
- Signature Verification: Verify commit signatures for audit purposes
§Usage Pattern
The typical workflow is:
- Create or open a repository with
initoropen - Prepare file changes using
FileToWritestructs - Write and commit files with
write_and_commit_files - Optionally verify signatures with
verify_commit_signature
Implementations§
Source§impl VersionedFileService
impl VersionedFileService
Sourcepub fn verify_commit_signature(
base_dir: &Path,
uuid: &str,
public_key_pem: &str,
) -> PatientResult<bool>
pub fn verify_commit_signature( base_dir: &Path, uuid: &str, public_key_pem: &str, ) -> PatientResult<bool>
Verifies the ECDSA signature of the latest commit in a patient’s Git repository.
VPR uses git2::Repository::commit_signed with an ECDSA P-256 signature over the
unsigned commit buffer produced by commit_create_buffer.
The signature, signing public key, and optional X.509 certificate are embedded directly
in the commit object’s gpgsig header as a base64-encoded JSON container.
This method reconstructs the commit buffer and verifies the signature using the embedded
public key, optionally checking that public_key_pem (if provided) matches it.
§Arguments
base_dir- The base directory for the patient records (e.g., clinical or demographics directory).uuid- The UUID of the patient record as a string.public_key_pem- The PEM-encoded public key used for verification.
§Returns
Returns true if the signature is valid, false otherwise.
§Errors
Returns a PatientError if:
- the UUID cannot be parsed,
- the Git repository cannot be opened or the latest commit cannot be read,
public_key_pemis provided but cannot be parsed as a public key or X.509 certificate.
Auto Trait Implementations§
impl Freeze for VersionedFileService
impl RefUnwindSafe for VersionedFileService
impl Send for VersionedFileService
impl !Sync for VersionedFileService
impl Unpin for VersionedFileService
impl UnwindSafe for VersionedFileService
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request