Skip to main content

acyclic_fs/
lib.rs

1#![deny(unsafe_code)]
2#![cfg_attr(
3    test,
4    allow(
5        clippy::indexing_slicing,
6        clippy::cognitive_complexity,
7        clippy::redundant_clone,
8        clippy::too_many_lines
9    )
10)]
11#![doc = include_str!("../README.md")]
12
13/// Generated public gRPC schema and client/server bindings.
14#[cfg(not(target_arch = "wasm32"))]
15#[allow(missing_docs, clippy::all, clippy::pedantic, clippy::too_many_lines)]
16pub mod wire {
17    /// Shared operation and capability messages used by Filesystem.
18    pub mod harness {
19        /// Version 1 of the shared harness contract.
20        pub mod v1 {
21            include!("generated/acyclic/harness/v1/acyclic.harness.v1.rs");
22        }
23    }
24
25    /// Filesystem messages and service definitions.
26    pub mod filesystem {
27        /// Version 2 of the public Filesystem contract.
28        pub mod v2 {
29            include!(concat!(env!("OUT_DIR"), "/acyclic.filesystem.v2.rs"));
30        }
31    }
32}
33
34#[cfg(not(target_arch = "wasm32"))]
35mod wire_service;
36#[cfg(not(target_arch = "wasm32"))]
37pub use wire_service::{
38    CredentialGrant, CredentialGrantRequest, CredentialKind, FilesystemCredentialIssuer,
39    FilesystemSourceProvider, FilesystemWireLimits, FilesystemWireService,
40    HostedSourceInvalidation, HostedSourceOperation, HostedSourceResult, HostedSourceScope,
41    HostedSourceState,
42};
43
44/// Canonical public descriptor set used by compatibility and conformance gates.
45pub const FILE_DESCRIPTOR_SET: &[u8] = include_bytes!("generated/acyclic-filesystem-v2.bin");
46
47#[cfg(not(target_arch = "wasm32"))]
48pub(crate) fn descriptor_digest() -> String {
49    blake3::hash(FILE_DESCRIPTOR_SET).to_hex().to_string()
50}
51
52#[cfg(all(test, not(target_arch = "wasm32")))]
53mod public_contract_tests {
54    use super::{FILE_DESCRIPTOR_SET, wire};
55
56    #[test]
57    fn generated_transport_and_descriptor_are_packaged() {
58        assert!(!FILE_DESCRIPTOR_SET.is_empty());
59        let _ = std::any::TypeId::of::<
60            wire::filesystem::v2::filesystem_service_client::FilesystemServiceClient<
61                tonic::transport::Channel,
62            >,
63        >();
64    }
65}
66
67pub mod async_storage;
68pub mod cache;
69pub mod cancellation;
70pub mod compat_wire;
71#[cfg(all(feature = "local", not(target_arch = "wasm32")))]
72pub mod core_state;
73pub mod demand;
74#[cfg(feature = "distributed")]
75pub mod distributed;
76mod distributed_fs;
77pub mod facade;
78pub mod foundation;
79pub mod git_compat;
80#[cfg(not(target_arch = "wasm32"))]
81pub mod hosted;
82pub mod kernel;
83pub mod lazy_workspace;
84pub mod lineage;
85pub mod materializer;
86#[cfg(test)]
87pub mod memory;
88pub mod merge_driver;
89pub mod model;
90pub mod mount;
91pub mod multi_root;
92#[cfg(feature = "native-watch")]
93#[cfg(all(feature = "native-watch", not(target_arch = "wasm32")))]
94pub mod native_capture;
95#[cfg(not(target_arch = "wasm32"))]
96pub mod native_exchange;
97#[cfg(all(feature = "native-watch", not(target_arch = "wasm32")))]
98#[doc(hidden)]
99pub mod native_host;
100#[cfg(not(target_arch = "wasm32"))]
101mod native_identity;
102#[cfg(all(feature = "native-mount", not(target_arch = "wasm32")))]
103pub mod native_mount;
104#[cfg(feature = "native-watch")]
105mod native_name;
106pub mod notification;
107pub mod operation_window;
108pub mod path;
109mod path_index;
110pub mod performance;
111pub mod s3;
112#[cfg(all(feature = "s3-http", not(target_arch = "wasm32")))]
113pub mod s3_http;
114#[cfg(feature = "memory")]
115pub mod simulation;
116#[cfg(all(feature = "native-watch", not(target_arch = "wasm32")))]
117pub mod source;
118pub mod speculation;
119#[cfg(all(feature = "local", not(target_arch = "wasm32")))]
120#[doc(hidden)]
121pub mod staged_objects;
122pub mod storage;
123pub mod streams_record;
124#[cfg(all(test, feature = "memory"))]
125#[path = "tests/support.rs"]
126pub(crate) mod test_support;
127pub mod text_merge;
128#[cfg(feature = "native-watch")]
129pub mod watch;
130#[cfg(all(feature = "native-watch", target_os = "windows"))]
131mod windows_usn;
132pub mod workspace;
133pub mod workspace_context;
134
135#[cfg(all(feature = "local", not(target_arch = "wasm32")))]
136pub use acyclic_native_runtime::{RenameMode, durable_rename};
137#[cfg(all(feature = "local", not(target_arch = "wasm32")))]
138pub use acyclic_objects::{LocalDurability as LocalObjectsDurability, LocalObjectsLimits};
139#[cfg(all(feature = "local", not(target_arch = "wasm32")))]
140pub use acyclic_stream::{LocalDurability as LocalStreamDurability, LocalStreamLimits};
141pub use async_storage::{
142    AsyncAuthorityStore, AsyncObjectStore, GenerationFork, GenerationForkSource,
143    ImmediateAuthorityStore, ImmediateObjectStore,
144};
145pub use cache::{CachedObjectStore, ObjectCacheConfigError, ObjectCacheOptions, ObjectCacheStats};
146pub use cancellation::{CancellationError, CancellationToken, Cancelled};
147#[cfg(all(feature = "local", not(target_arch = "wasm32")))]
148pub use core_state::{LocalCoreStateStore, LocalCoreStateStoreError};
149#[cfg(feature = "distributed")]
150pub use distributed::{ProviderObjectStore, StreamAuthorityStore};
151pub use distributed_fs::DistributedFs;
152pub use facade::{
153    AuthoredLiveMutationResult, AuthoredMutation, AuthoredTransactionResult, Checkout,
154    CheckoutCommitOutcome, ContentStager, DetachedFile, DirectoryBindingChange,
155    DirectoryPageRequest, DirectoryRecordEntry, DirectoryRecordPage, EmbeddedCapabilities,
156    FileCloneRequest, FileDescription, FileRecordChange, Fs, FsError, FsReceipt, FsResult,
157    GenerationDiff, LiveMutationOutcome, MergeConflict, MergePreparation, NamedAttributeWriteMode,
158    PathMetadataLookup, PinnedReader, ResolvedDirectoryEntry, ResolvedDirectoryPage, ResolvedFile,
159    ResolvedFileRangeReadRequest, StagedContent, Volume,
160};
161#[cfg(all(feature = "local", not(target_arch = "wasm32")))]
162pub use facade::{
163    LocalAuthorityBackend, LocalFs, LocalGarbageCollection, LocalObjectBackend,
164    LocalOperationWindowStore, LocalOptions, LocalVolume,
165};
166#[cfg(all(feature = "memory", feature = "distributed"))]
167pub use facade::{MemoryAuthorityBackend, MemoryFs, MemoryObjectBackend};
168pub use foundation::{
169    AUTHORITY_COMMIT_DIGEST_ENVELOPE_BYTES, AuthorityId, CheckoutId, Digest, DurableCommit, Epoch,
170    FileId, GenerationId, Head, MountId, OperationId, ProposedCommit, Sequence, VolumeId, WatchId,
171    authority_commit_digest,
172};
173pub use git_compat::{
174    GitBisectResult, GitBisectState, GitBlameLine, GitBranch, GitCaptureAuthenticationError,
175    GitCaptureError, GitCaptureProof, GitCapturedGeneration, GitCommand, GitCommandOutput,
176    GitCommit, GitCommitId, GitCompatError, GitCompatRepository, GitCompatRunError, GitCompatState,
177    GitCompatStore, GitDiffCounts, GitDirtyState, GitFilesystemAction, GitFilesystemExecutor,
178    GitFilesystemResult, GitGenerationRef, GitGrepMatch, GitGrepResult, GitIgnorePolicy,
179    GitObjectName, GitPatchError, GitPendingMutation, GitPendingTransition, GitPublicationRecord,
180    GitResetMode, GitStatus, GitTransitionId, GitTreeEntry, GitTreeRef, IntoGitTreeRef,
181    MemoryGitCompatStore, apply_git_patch, apply_git_patch_with_permit, blame_git_generations,
182    capture_git_compatible_generation, capture_git_compatible_generation_at,
183    capture_git_compatible_generation_incremental, git_compatible_diff_counts, grep_git_generation,
184    walk_git_tree,
185};
186#[cfg(not(target_arch = "wasm32"))]
187pub use hosted::{
188    HostedFs, HostedFsError, HostedFsOptions, HostedGeneration, HostedS3Access,
189    HostedS3AccessOptions, HostedTransaction, HostedWorkspace,
190};
191pub use kernel::{
192    GenerationExportManifest, GenerationExportManifestError, decode_generation_export_manifest,
193    encode_generation_export_manifest,
194};
195pub use lazy_workspace::{
196    LazyDirectoryCursor, LazyDirectoryEntry, LazyDirectoryPage, LazyLookup, LazyOverlay,
197    LazyOverlayId, LazySeekTarget, LazyShadow, LazyShadowId, LazySnapshotId, LazySnapshotRef,
198    LazyStat, LazyWorkspace, LazyWorkspaceError, LazyWorkspaceState, LazyWorkspaceStore,
199    MemoryLazyWorkspaceStore,
200};
201pub use lineage::{
202    MemoryWorkspaceLineageStore, MemoryWorkspaceLineageStoreError, WorkspaceGraph,
203    WorkspaceLineageError, WorkspaceLineageRecord, WorkspaceLineageStore,
204};
205pub use materializer::{
206    JournaledMaterializer, MaterializationBackend, MaterializationEdit, MaterializationError,
207    MaterializationJournal, MaterializationJournalStore, MaterializationPhase, MaterializationPlan,
208    MaterializationPreimage, MaterializationRecovery, MemoryMaterializationJournalStore,
209    MemoryMaterializationJournalStoreError,
210};
211#[cfg(not(target_arch = "wasm32"))]
212pub use materializer::{NativeTreeMaterializationBackend, NativeTreeMaterializationError};
213#[cfg(all(
214    feature = "local",
215    feature = "native-mount",
216    not(target_arch = "wasm32")
217))]
218pub use materializer::{
219    NativeWorkspacePublication, NativeWorkspacePublicationError,
220    publish_native_generation_transition, publish_native_workspace_generation,
221};
222#[cfg(test)]
223pub use memory::{MemoryAuthorityStore, MemoryObjectStore};
224pub use merge_driver::{
225    AttributeRule, CachedMergeResolution, ConflictKey, ConflictKind, ConflictSide, ConflictValue,
226    ConflictView, DefaultTextMergeDriver, DriverError, DriverRegistrationError,
227    MemoryMergeResolutionCache, MergeDriver, MergeDriverMode, MergeDriverRegistry, MergePlan,
228    MergePlanResolutionError, MergeResolution, MergeResolutionCache, ResolutionKey,
229    UnpublishedMergeCandidate, resolve_merge_plan,
230};
231pub use mount::{
232    MountError, MountedCheckout, MountedGeneration, MountedView, MountedViewBuilder,
233    MountedViewSnapshot, RoutedCheckout,
234};
235pub use multi_root::{
236    LineageMultiRootPublicationAuthorizationError, LineageMultiRootPublicationAuthorizer,
237    MaterializingWorkspaceMultiRootPublisher, MaterializingWorkspaceMultiRootPublisherError,
238    MemoryMultiRootPublicationStore, MemoryMultiRootPublicationStoreError, MultiRootConflictFinish,
239    MultiRootFence, MultiRootMaterializer, MultiRootMergeCandidate, MultiRootMergePlan,
240    MultiRootMergeRoot, MultiRootPublication, MultiRootPublicationAuthorizer,
241    MultiRootPublicationCoordinator, MultiRootPublicationError, MultiRootPublicationPhase,
242    MultiRootPublicationStore, MultiRootPublishRoot, MultiRootPublisher, Publication,
243    WorkspaceMultiRootPublisher, WorkspaceMultiRootPublisherError, WorkspaceResolver,
244};
245#[cfg(all(feature = "native-watch", not(target_arch = "wasm32")))]
246pub use native_capture::{
247    CaptureError, CaptureOptions, CapturePolicy, CaptureReceipt, WatchCaptureReceipt,
248    capture_baseline, capture_baseline_with_policy, capture_paths, capture_paths_with_policy,
249    capture_root_identity, capture_subtree, capture_subtree_with_policy,
250    capture_subtrees_with_policy, capture_watch_batch, capture_watch_batch_with_policy,
251    host_path_to_namespace, namespace_to_host_path,
252};
253#[cfg(not(target_arch = "wasm32"))]
254pub use native_exchange::{
255    NativeExchangeError, NativeExchangeJournal, NativeExchangeOutcome, NativeExchangePhase,
256    exchange_native_entries, prepare_native_exchange, prepare_native_exchange_with_recovery,
257    publish_native_exchange, recover_native_exchange,
258};
259#[cfg(not(target_arch = "wasm32"))]
260pub use native_identity::NativeRootIdentity;
261#[cfg(all(feature = "native-mount", windows))]
262pub use native_mount::recover_native_mount_destination_preserving_residue;
263#[cfg(all(feature = "native-mount", not(target_arch = "wasm32")))]
264pub use native_mount::{
265    CheckoutMountSource, HostPathReplacement, HostPathRestore, LazyMount, LazyWorkingSet,
266    MaterializationReceipt, MaterializeError, MaterializeOptions, Mount, MountAttributePage,
267    MountDirectoryEntry, MountDirectoryPage, MountFilesystem, MountLifecycleError, MountLookup,
268    MountNode, MountNodeKind, MountOpenFile, MountOptions, MountPath, MountPublication,
269    MountRangeAllocation, MountSeekTarget, MountSourceError, MountSparseRange, MountSparseSpan,
270    MountViewLease, NativeBlockCloneAccelerationEvidence, NativeMountCapabilities,
271    NativeMountError, NativeMountKind, NativeMountRequest, NativeMountSession,
272    NativeMountSessionIsolation, NativeSparseAccelerationEvidence, NativeStorageAccelerationError,
273    NativeStorageAccelerationEvidence, NativeStorageCapabilities, NativeStorageCapabilityError,
274    RoutedMountSource, SharedCheckout, SharedCheckoutState,
275    detach_native_mount_destination_after_crash, materialize_checkout,
276    materialize_checkout_host_path, materialize_checkout_path, materialize_checkout_paths,
277    mount_native, mount_native_over_existing, probe_native_mount,
278    probe_native_storage_accelerations, probe_native_storage_capabilities,
279    reclaim_native_mount_destination_fence, reclaim_stale_native_mount_destination_fences,
280    recover_native_mount_destination, restore_checkout_host_path, seal_checkout,
281    seal_checkout_with_permit,
282};
283pub use notification::{
284    AsyncNotificationStore, ImmediateNotificationStore, MemoryNotificationStore, NotificationError,
285    NotificationPoll, NotificationResult, NotificationStore,
286};
287pub use operation_window::{
288    MemoryOperationWindowStore, OperationLease, OperationLeaseId, OperationReconcileLimits,
289    OperationWindowCoordinator, OperationWindowError, OperationWindowFinish, OperationWindowLease,
290    OperationWindowPhase, OperationWindowReconcile, OperationWindowSnapshot, OperationWindowStore,
291    StreamOperationWindowStore, StreamOperationWindowStoreError, WorkspaceOperationFinish,
292};
293pub use performance::{
294    MeasuredResult, OperationFailure, OperationReceipt, WorkBudget, WorkCounters, WorkError,
295};
296pub use s3::{
297    S3Error, S3List, S3ListCursor, S3ListOptions, S3MultipartOptions, S3MultipartUpload, S3Object,
298    S3ObjectHead, S3Workspace,
299};
300#[cfg(all(feature = "s3-http", not(target_arch = "wasm32")))]
301pub use s3_http::{
302    FilesystemS3Adapter, FilesystemS3Authentication, FilesystemS3Limits, FilesystemS3Principal,
303    FilesystemS3Resolver, S3MultipartRetentionLimits, active_s3_multipart_objects,
304};
305#[cfg(feature = "memory")]
306pub use simulation::{
307    ScheduledSimulationFault, SimulatedAuthorityStore, SimulatedObjectStore, Simulation,
308    SimulationError, SimulationFault, SimulationOperation, SimulationOptions, SimulationTrace,
309};
310#[cfg(all(feature = "native-watch", not(target_arch = "wasm32")))]
311pub use source::{ReconcileOutcome, Source, SourceError, SourceMode, SourceOptions, SourceState};
312pub use speculation::{
313    ObjectResidency, PromotionAdmission, PromotionCandidate, PromotionDestination,
314    PromotionExecutor, PromotionMetrics, PromotionPlan, PromotionRejection, PromotionSpeculator,
315    PromotionSpeculatorError, PromotionSpeculatorOptions, ResidencyAdmission, ResidencyCandidate,
316    ResidencyHint, ResidencyMetrics, ResidencyPermit, ResidencyReason, ResidencyRejection,
317    ResidencySpeculator, ResidencySpeculatorError, ResidencySpeculatorOptions,
318    SpeculationController, SpeculationControllerError, SpeculationMetrics, SpeculationOptions,
319    SpeculationPreemption, StorageLocationId, StorageTier, StorePromotionExecutor,
320    StorePromotionExecutorError, execute_promotion, execute_residency,
321};
322pub use storage::{
323    AppendOutcome, AuthorityFailure, AuthorityReceipt, AuthorityResult, AuthorityStore,
324    AuthorityStoreError, ByteRange, CreateAuthorityOutcome, FenceOutcome, GuardedAppend,
325    OBJECT_DIGEST_ENVELOPE_BYTES, ObjectFailure, ObjectId, ObjectKind, ObjectRead,
326    ObjectReadRequest, ObjectReadRetention, ObjectReceipt, ObjectResult, ObjectStore,
327    ObjectStoreError, PublicationPermit, PublicationReservation, ReplayLimit, ReservationOutcome,
328    object_digest,
329};
330pub use streams_record::{
331    STREAMS_AUTHORITY_RECORD_HEADER_BYTES, StreamsAuthorityRecord, StreamsAuthorityRecordError,
332    StreamsDurableRecord,
333};
334#[cfg(feature = "native-watch")]
335pub use watch::{
336    NativeWatch, NativeWatchBackend, NativeWatchCapabilities, NativeWatchError, NativeWatchOptions,
337    WatchBatch, WatchChange, WatchEpoch, WatchInvalidationReason, WatchSequence,
338    native_watch_capabilities,
339};
340#[cfg(all(feature = "native-watch", target_os = "windows"))]
341pub use windows_usn::{
342    WindowsUsnCheckpoint, WindowsUsnContinuity, WindowsUsnDiscontinuity, WindowsUsnError,
343    capture_windows_usn_checkpoint, validate_windows_usn_checkpoint,
344};
345pub use workspace::{
346    ApplyOptions, ChangeSet, ChangedPath, Checkpoint, DrivenJoinError, ForkOptions, Generation,
347    GenerationPin, IdempotencyKey, JoinBuilder, JoinHistory, JoinOutcome, JoinPlan, Transaction,
348    TransactionCommit, TransactionConflict, TransactionConflictRegion, TransactionDependencyUse,
349    TransactionRebase, TransactionSparseSeek, Workspace, WorkspaceDelete, WorkspaceDirectoryEntry,
350    WorkspaceDirectoryPage, WorkspaceError, WorkspaceExtentKind, WorkspaceExtentPlan,
351    WorkspaceExtentSpan, WorkspaceId, WorkspaceMetadata, WorkspaceName, WorkspaceNameError,
352    WorkspacePathApply, WorkspacePathConflict, WorkspaceRebase, WorkspaceRestore, WorkspaceStat,
353    WorkspaceSync,
354};
355pub use workspace_context::{
356    MemoryWorkspaceContextStore, MemoryWorkspaceContextStoreError, WorkspaceContext,
357    WorkspaceContextDiscardOutcome, WorkspaceContextError, WorkspaceContextId,
358    WorkspaceContextRegistry, WorkspaceContextRoot, WorkspaceContextState, WorkspaceContextStore,
359    WorkspaceRootId, WorkspaceRoute, WorkspaceRouteKind,
360};