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#[cfg(not(target_arch = "wasm32"))]
15#[allow(missing_docs, clippy::all, clippy::pedantic, clippy::too_many_lines)]
16pub mod wire {
17 pub mod harness {
19 pub mod v1 {
21 include!("generated/acyclic/harness/v1/acyclic.harness.v1.rs");
22 }
23 }
24
25 pub mod filesystem {
27 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
44pub 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};