diff --git a/Directory.Build.props b/Directory.Build.props index 96b88ca..2575f3c 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -29,8 +29,8 @@ https://github.com/managedcode/Storage https://github.com/managedcode/Storage Managed Code - Storage - 10.0.9 - 10.0.9 + 10.0.10 + 10.0.10 diff --git a/ManagedCode.Storage.Core/AGENTS.md b/ManagedCode.Storage.Core/AGENTS.md index 3464ada..d2b451b 100644 --- a/ManagedCode.Storage.Core/AGENTS.md +++ b/ManagedCode.Storage.Core/AGENTS.md @@ -51,3 +51,5 @@ Parent: `../AGENTS.md` - Treat `IStorage`, `IStorageProvider`, and factory abstractions as public contracts; changing them is an ask-first API change. - Keep shared helpers vendor-agnostic; SDK-specific behavior belongs in provider projects, not in Core. - Preserve keyed and default storage resolution semantics because VFS, server integrations, and Orleans depend on them. + +- Shared low-level storage contracts and value types belong in `ManagedCode.Storage.Core.Primitives`; do not introduce a generic `Objects` namespace. diff --git a/ManagedCode.Storage.Core/Objects/IObjectStorage.cs b/ManagedCode.Storage.Core/Primitives/IObjectStorage.cs similarity index 97% rename from ManagedCode.Storage.Core/Objects/IObjectStorage.cs rename to ManagedCode.Storage.Core/Primitives/IObjectStorage.cs index 572f8fa..ad2fd50 100644 --- a/ManagedCode.Storage.Core/Objects/IObjectStorage.cs +++ b/ManagedCode.Storage.Core/Primitives/IObjectStorage.cs @@ -4,7 +4,7 @@ using System.Threading; using System.Threading.Tasks; -namespace ManagedCode.Storage.Core.Objects; +namespace ManagedCode.Storage.Core.Primitives; /// Optional atomic object operations. Providers must enforce conditions server-side. public interface IObjectStorage diff --git a/ManagedCode.Storage.Core/Objects/StorageObjectModels.cs b/ManagedCode.Storage.Core/Primitives/StorageObjectModels.cs similarity index 97% rename from ManagedCode.Storage.Core/Objects/StorageObjectModels.cs rename to ManagedCode.Storage.Core/Primitives/StorageObjectModels.cs index dd629ac..a024439 100644 --- a/ManagedCode.Storage.Core/Objects/StorageObjectModels.cs +++ b/ManagedCode.Storage.Core/Primitives/StorageObjectModels.cs @@ -1,7 +1,7 @@ using System; using System.Collections.Generic; -namespace ManagedCode.Storage.Core.Objects; +namespace ManagedCode.Storage.Core.Primitives; public sealed record StorageContainerInfo(string ETag, bool IsPrivate, IReadOnlyDictionary Metadata); diff --git a/Storages/ManagedCode.Storage.Azure/AzureObjectOperations.cs b/Storages/ManagedCode.Storage.Azure/AzureObjectOperations.cs index c9ddad3..8467b10 100644 --- a/Storages/ManagedCode.Storage.Azure/AzureObjectOperations.cs +++ b/Storages/ManagedCode.Storage.Azure/AzureObjectOperations.cs @@ -8,7 +8,7 @@ using Azure.Storage.Blobs; using Azure.Storage.Blobs.Models; using Azure.Storage.Blobs.Specialized; -using ManagedCode.Storage.Core.Objects; +using ManagedCode.Storage.Core.Primitives; namespace ManagedCode.Storage.Azure; diff --git a/Storages/ManagedCode.Storage.Azure/AzureStorage.ObjectOperations.cs b/Storages/ManagedCode.Storage.Azure/AzureStorage.ObjectOperations.cs index 0ff2e77..ba52744 100644 --- a/Storages/ManagedCode.Storage.Azure/AzureStorage.ObjectOperations.cs +++ b/Storages/ManagedCode.Storage.Azure/AzureStorage.ObjectOperations.cs @@ -3,7 +3,7 @@ using System.IO; using System.Threading; using System.Threading.Tasks; -using ManagedCode.Storage.Core.Objects; +using ManagedCode.Storage.Core.Primitives; namespace ManagedCode.Storage.Azure; diff --git a/Storages/ManagedCode.Storage.Azure/AzureStorage.cs b/Storages/ManagedCode.Storage.Azure/AzureStorage.cs index 9cb0c6c..4ed66ec 100644 --- a/Storages/ManagedCode.Storage.Azure/AzureStorage.cs +++ b/Storages/ManagedCode.Storage.Azure/AzureStorage.cs @@ -20,7 +20,7 @@ namespace ManagedCode.Storage.Azure; public partial class AzureStorage(IAzureStorageOptions options, ILogger? logger = default) - : BaseStorage(options), IAzureStorage, ManagedCode.Storage.Core.Objects.IMultipartObjectStorage + : BaseStorage(options), IAzureStorage, ManagedCode.Storage.Core.Primitives.IMultipartObjectStorage { private static readonly StorageTransferOptions DefaultUploadTransferOptions = new() { diff --git a/Tests/ManagedCode.Storage.Tests/Storages/Azure/AzureObjectStorageTests.cs b/Tests/ManagedCode.Storage.Tests/Storages/Azure/AzureObjectStorageTests.cs index 846279b..e6c7af3 100644 --- a/Tests/ManagedCode.Storage.Tests/Storages/Azure/AzureObjectStorageTests.cs +++ b/Tests/ManagedCode.Storage.Tests/Storages/Azure/AzureObjectStorageTests.cs @@ -5,7 +5,7 @@ using System.Threading.Tasks; using ManagedCode.Storage.Azure; using ManagedCode.Storage.Azure.Options; -using ManagedCode.Storage.Core.Objects; +using ManagedCode.Storage.Core.Primitives; using ManagedCode.Storage.Tests.Common; using ManagedCode.Storage.VirtualFileSystem.Extensions; using ManagedCode.Storage.VirtualFileSystem.Core; diff --git a/docs/Architecture.md b/docs/Architecture.md index dc7080c..a8bbd07 100644 --- a/docs/Architecture.md +++ b/docs/Architecture.md @@ -16,7 +16,7 @@ Single source of truth: keep this doc navigational and coarse. Detailed behavior ## Atomic object capabilities `IStorage` retains its existing portable API. AzureStorage additionally implements -`IObjectStorage` and `IMultipartObjectStorage` from Core. Consumers acquire these +`IObjectStorage` and `IMultipartObjectStorage` from `ManagedCode.Storage.Core.Primitives`. Consumers acquire these capabilities with `RequireObjectStorage` / `RequireMultipartStorage`; unsupported providers fail explicitly rather than approximating atomic conditions. No Azure SDK models appear in these capability contracts. `AzureStorageConnection.Create`