Expand description
Draftline provides Git-native versioning for creative content workflows.
The public API uses content-workflow terms such as Workspace,
Version, and Variation while keeping Git as an implementation
detail for most callers.
§Content policy
Use ContentPolicy to define which workspace files are user content.
use draftline::{ContentPolicy, Workspace};
fn main() -> Result<(), draftline::DraftlineError> {
let policy = ContentPolicy::new()
.include_paths(["content", "assets"])?
.include_extensions(["md", "txt"])?
.exclude_paths(["content/private"])?;
let workspace = Workspace::init_with_policy("my-content", policy)?;
Ok(())
}§Variation metadata
Variation names are stable Draftline identifiers. Hosts can attach display metadata such as labels and slugs without changing the underlying name.
use draftline::{VariationMetadata, Workspace};
fn main() -> Result<(), draftline::DraftlineError> {
let workspace = Workspace::init("my-content")?;
let version = workspace.save_version("Initial draft")?;
let variation = workspace.create_variation_from_with_metadata(
version.id(),
"draft-a",
VariationMetadata::new()
.with_label("Draft A")
.with_slug("draft-a"),
)?;
assert_eq!(variation.display_label(), "Draft A");
Ok(())
}§Remote credentials
Remote operations accept credential callbacks so host applications can provide credentials from their own authentication flow.
use draftline::{RemoteCredential, RemoteOptions, Workspace};
fn main() -> Result<(), draftline::DraftlineError> {
let token = std::env::var("GITHUB_TOKEN").unwrap();
let mut options = RemoteOptions::new().with_credentials(move |request| {
if request.allows_username_password {
Ok(RemoteCredential::UsernamePassword {
username: "x-access-token".to_string(),
password: token.clone(),
})
} else {
Ok(RemoteCredential::Default)
}
});
let workspace = Workspace::open("my-content")?;
workspace.fetch_remote_with_options("origin", &mut options)?;
Ok(())
}Re-exports§
pub use content_policy::ContentPolicy;pub use error::DraftlineError;pub use error::Result;pub use profile::AttributionOperation;pub use profile::ContributorProfile;pub use profile::ContributorProvider;pub use recovery::RecoveryOperation;pub use recovery::RecoveryState;pub use remote::Contributor;pub use remote::PublishPreflight;pub use remote::PublishResult;pub use remote::PublishToken;pub use remote::RemoteCredential;pub use remote::RemoteCredentialRequest;pub use remote::RemoteEndpoint;pub use remote::RemoteOptions;pub use remote::RemoteVersionSummary;pub use remote::SyncState;pub use remote::SyncStatus;pub use workspace::AdoptionPreflightReport;pub use workspace::ApplyIncomingReport;pub use workspace::ApplyIncomingResult;pub use workspace::ChangeKind;pub use workspace::ChangeSet;pub use workspace::ChangedFile;pub use workspace::ContentPolicyAudit;pub use workspace::CurrentFileDiff;pub use workspace::CurrentFilePreview;pub use workspace::DiagnosticCode;pub use workspace::DiagnosticSeverity;pub use workspace::DirtySummary;pub use workspace::ErrorExplanation;pub use workspace::FileHazard;pub use workspace::FileHazardKind;pub use workspace::HistoryEntry;pub use workspace::MergeConflictResolution;pub use workspace::MergeIncomingReport;pub use workspace::MergeIncomingResult;pub use workspace::MergeIncomingToken;pub use workspace::MergeResolutionChoice;pub use workspace::OperationLockInspection;pub use workspace::OperationLockMetadata;pub use workspace::OperationLockState;pub use workspace::OperationLockSummary;pub use workspace::PreflightReport;pub use workspace::PreviewFile;pub use workspace::PurgePreflight;pub use workspace::PurgeToken;pub use workspace::PurgeVerification;pub use workspace::RecoveryRepairResult;pub use workspace::RemoteHistoryReplacePreflight;pub use workspace::RemoteHistoryReplaceToken;pub use workspace::RemoteVariation;pub use workspace::RemoteVariationDeletePreflight;pub use workspace::RemoteVariationDeleteToken;pub use workspace::RemoteVariationDiagnostics;pub use workspace::RestoreVersionTarget;pub use workspace::RetryClass;pub use workspace::SafeNextAction;pub use workspace::SharingMode;pub use workspace::Shelf;pub use workspace::ShelfApplyReport;pub use workspace::SquashVersionsPreflight;pub use workspace::SquashVersionsToken;pub use workspace::SupportRef;pub use workspace::SupportRefExpirationPreflight;pub use workspace::SupportRefExpirationToken;pub use workspace::SupportRefKind;pub use workspace::SupportRefPublishItem;pub use workspace::SupportRefPublishPreflight;pub use workspace::SupportRefPublishToken;pub use workspace::SupportRefRestorePreflight;pub use workspace::SupportRefRestoreToken;pub use workspace::SupportRefScope;pub use workspace::SupportRefSummary;pub use workspace::SwitchPolicy;pub use workspace::TargetedRestoreVersionResult;pub use workspace::Variation;pub use workspace::VariationDeletePreflight;pub use workspace::VariationDeleteToken;pub use workspace::VariationId;pub use workspace::VariationMetadata;pub use workspace::VariationSummary;pub use workspace::Version;pub use workspace::VersionDiff;pub use workspace::VersionId;pub use workspace::VersionPreview;pub use workspace::Workspace;pub use workspace::WorkspaceCapabilities;pub use workspace::WorkspaceDiagnostic;pub use workspace::WorkspaceId;pub use workspace::WorkspaceInspection;pub use workspace::WorkspaceSummary;pub use workspace::WorkspaceVerification;
Modules§
- content_
policy - error
- merge
- path
- profile
- recovery
- remote
- tauri_
contract - Dependency-free command adapter for Tauri Workbench hosts.
- workspace