Client sample
This commit is contained in:
parent
2f2755cbcb
commit
30e0daa022
5 changed files with 720 additions and 45 deletions
35
.gitignore
vendored
Normal file
35
.gitignore
vendored
Normal file
|
@ -0,0 +1,35 @@
|
|||
# Binaries for programs and plugins
|
||||
*.exe
|
||||
*.exe~
|
||||
*.dll
|
||||
*.so
|
||||
*.dylib
|
||||
*.pdb
|
||||
|
||||
# Test binary, built with `go test -c`
|
||||
*.test
|
||||
|
||||
# Output of the go coverage tool, specifically when used with LiteIDE
|
||||
*.out
|
||||
|
||||
# Dependency directories
|
||||
vendor/
|
||||
|
||||
# IDE
|
||||
.idea
|
||||
.vscode
|
||||
|
||||
# coverage
|
||||
coverage.txt
|
||||
coverage.html
|
||||
|
||||
# antlr tool jar
|
||||
antlr-*.jar
|
||||
|
||||
# tempfiles
|
||||
.cache
|
||||
|
||||
# binary
|
||||
bin/
|
||||
release/
|
||||
obj/
|
216
Program.cs
216
Program.cs
|
@ -1,84 +1,220 @@
|
|||
using FrostFS.SDK.ClientV2;
|
||||
using System.Diagnostics;
|
||||
|
||||
using FrostFS.SDK.ClientV2;
|
||||
using FrostFS.SDK.ModelsV2;
|
||||
using FrostFS.SDK.ModelsV2.Enums;
|
||||
using FrostFS.SDK.ModelsV2.Netmap;
|
||||
using FrostFS.SDK.ClientV2.Extensions;
|
||||
using FrostFS.SDK.ClientV2.Interfaces;
|
||||
|
||||
try
|
||||
{
|
||||
var fsClient = new Client("KwHDAJ66o8FoLBjVbjP2sWBmgBMGjt7Vv4boA7xQrBoAYBE397Aq", "http://172.29.238.97:8080");
|
||||
var fsClient = Client.GetInstance("KwHDAJ66o8FoLBjVbjP2sWBmgBMGjt7Vv4boA7xQrBoAYBE397Aq", "http://172.29.238.97:8080");
|
||||
|
||||
// List containers
|
||||
Console.WriteLine("Existing containers:");
|
||||
await FetchAndRemoveContainers(fsClient);
|
||||
|
||||
await foreach(var cid in fsClient.ListContainersAsync())
|
||||
ContainerId containerId = await CreateContainer(fsClient);
|
||||
|
||||
ShowFileInExplorer();
|
||||
|
||||
var fileName = "cat.jpg";
|
||||
//var fileName = "fat_cat.bmp";
|
||||
|
||||
var objectId = await PutObject(fsClient, containerId, fileName);
|
||||
//var objectId = await PutSingleObject(fsClient, containerId, fileName);
|
||||
//var objectId = await PutObjectClientCut(fsClient, containerId, fileName);
|
||||
|
||||
var filter = new ObjectFilter(ObjectMatchType.Equals, "fileName", fileName);
|
||||
await foreach (var objId in fsClient.SearchObjectsAsync(containerId, filter))
|
||||
{
|
||||
Console.WriteLine(cid.ToString());
|
||||
// await fsClient.DeleteContainerAsync(cid);
|
||||
// Console.WriteLine($"REmoved container: {cid}");
|
||||
await GetObjectInfo(fsClient, containerId, objId);
|
||||
}
|
||||
|
||||
var @object = await fsClient.GetObjectAsync(containerId, objectId!);
|
||||
|
||||
File.WriteAllBytes(GetBroFileName(fileName), @object.Payload);
|
||||
|
||||
await foreach (var cid in fsClient.ListContainersAsync())
|
||||
{
|
||||
Console.WriteLine($"ContainerId: {cid} (removing...)");
|
||||
await fsClient.DeleteContainerAsync(cid);
|
||||
}
|
||||
|
||||
// Create container
|
||||
await Task.Delay(500);
|
||||
|
||||
await foreach (var cid in fsClient.ListContainersAsync())
|
||||
{
|
||||
Console.WriteLine($"Container {cid} still alive!");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"Error: {ex.Message}");
|
||||
}
|
||||
|
||||
static async Task FetchAndRemoveContainers(IFrostFSClient fsClient)
|
||||
{
|
||||
Console.WriteLine("Existing containers:");
|
||||
|
||||
await foreach (var cid in fsClient.ListContainersAsync())
|
||||
{
|
||||
await fsClient.DeleteContainerAsync(cid);
|
||||
Console.WriteLine($"Removed container: {cid}");
|
||||
}
|
||||
}
|
||||
|
||||
static async Task<ContainerId> CreateContainer(IFrostFSClient fsClient)
|
||||
{
|
||||
var placementPolicy = new PlacementPolicy(true, new Replica(1));
|
||||
|
||||
var containerId = await fsClient.CreateContainerAsync(new Container(BasicAcl.PublicRW, placementPolicy));
|
||||
Console.WriteLine($"Created container: {containerId}");
|
||||
|
||||
Container? container = null;
|
||||
while(container is null)
|
||||
while (container is null)
|
||||
{
|
||||
try
|
||||
{
|
||||
await Task.Delay(1000);
|
||||
container = await fsClient.GetContainerAsync(containerId);
|
||||
}
|
||||
catch
|
||||
{
|
||||
Console.WriteLine("Waiting for the container is ready");
|
||||
Console.WriteLine("Waiting for the container is ready. Some time is required");
|
||||
}
|
||||
}
|
||||
|
||||
var currentDir = Directory.GetCurrentDirectory();
|
||||
return containerId;
|
||||
}
|
||||
|
||||
// Put object
|
||||
using var fileStream = File.OpenRead("cat.jpg");
|
||||
|
||||
var cat = new ObjectHeader(
|
||||
static async Task<ObjectId> PutObject(IFrostFSClient fsClient, ContainerId containerId, string fileName)
|
||||
{
|
||||
var fileStream = File.OpenRead(fileName);
|
||||
|
||||
var header = new ObjectHeader(
|
||||
containerId: containerId,
|
||||
type: ObjectType.Regular,
|
||||
new ObjectAttribute("Filename", "cat.jpg")
|
||||
new ObjectAttribute("fileName", fileName)
|
||||
);
|
||||
|
||||
var objectId = await fsClient.PutObjectAsync(cat, fileStream);
|
||||
return await fsClient.PutObjectAsync(header, fileStream);
|
||||
}
|
||||
|
||||
static async Task<ObjectId> PutSingleObject(IFrostFSClient fsClient, ContainerId containerId, string fileName)
|
||||
{
|
||||
var bytes = File.ReadAllBytes(fileName);
|
||||
|
||||
var obj = new FrostFS.SDK.ModelsV2.Object(containerId, bytes)
|
||||
.AddAttribute("Filename", fileName);
|
||||
|
||||
var objectId = await fsClient.PutSingleObjectAsync(obj);
|
||||
|
||||
return objectId;
|
||||
}
|
||||
|
||||
static async Task GetObjectInfo(IFrostFSClient fsClient, ContainerId containerId, ObjectId objectId)
|
||||
{
|
||||
Console.WriteLine("--------------------------------------------------");
|
||||
Console.WriteLine($"Object ID: {objectId}");
|
||||
|
||||
// Get object header
|
||||
var objHeader = await fsClient.GetObjectHeadAsync(containerId, objectId);
|
||||
|
||||
Console.WriteLine("Attributes:");
|
||||
foreach(var attribute in objHeader.Attributes)
|
||||
Console.WriteLine($"size: {objHeader.PayloadLength}");
|
||||
|
||||
if (objHeader.Split?.SplitId != null)
|
||||
Console.WriteLine($"splitID: { objHeader.Split?.SplitId}");
|
||||
|
||||
if (objHeader.Split?.Parent != null)
|
||||
Console.WriteLine($"parent: {objHeader.Split?.Parent}");
|
||||
|
||||
if (objHeader.Split?.Previous != null)
|
||||
Console.WriteLine($"previous: {objHeader.Split?.Previous}");
|
||||
|
||||
Console.WriteLine($"Attributes:");
|
||||
foreach (var attribute in objHeader.Attributes)
|
||||
{
|
||||
Console.WriteLine($"{attribute.Key}:{attribute.Value}");
|
||||
Console.WriteLine($"\t{attribute.Key} = {attribute.Value}");
|
||||
}
|
||||
|
||||
// Get object back
|
||||
var obj = await fsClient.GetObjectAsync(containerId, objectId);
|
||||
|
||||
File.WriteAllBytes("downloaded.jpg", obj.Payload);
|
||||
|
||||
Console.WriteLine("Existing containers after creating:");
|
||||
await foreach(var cid in fsClient.ListContainersAsync())
|
||||
if (objHeader.Split?.Children?.FirstOrDefault() != null)
|
||||
{
|
||||
Console.WriteLine($"ContainerId: {cid} (removing...)");
|
||||
await fsClient.DeleteContainerAsync(cid);
|
||||
}
|
||||
|
||||
await Task.Delay(2000);
|
||||
|
||||
await foreach(var cid in fsClient.ListContainersAsync())
|
||||
{
|
||||
Console.WriteLine($"Container {cid} is alive!");
|
||||
Console.WriteLine($"Children:");
|
||||
objHeader.Split?.Children.ForEach(x => Console.WriteLine(x.Value));
|
||||
}
|
||||
}
|
||||
catch(Exception ex)
|
||||
|
||||
static async Task<ObjectId?> PutObjectClientCut(IFrostFSClient fsClient, ContainerId containerId, string fileName)
|
||||
{
|
||||
Console.WriteLine($"Error: {ex.Message}");
|
||||
List<ObjectId> sentObjectIds = [];
|
||||
FrostFS.SDK.ModelsV2.Object? currentObject;
|
||||
|
||||
var partSize = 1024 * 1024;
|
||||
var buffer = new byte[partSize];
|
||||
|
||||
var largeObject = new LargeObject(containerId);
|
||||
|
||||
var split = new Split();
|
||||
|
||||
var fileInfo = new FileInfo(fileName);
|
||||
var fullLength = (ulong)fileInfo.Length;
|
||||
var fileNameAttribute = new ObjectAttribute("fileName", fileInfo.Name);
|
||||
|
||||
using var stream = File.OpenRead(fileName);
|
||||
while (true)
|
||||
{
|
||||
var bytesCount = await stream.ReadAsync(buffer.AsMemory(0, partSize));
|
||||
|
||||
split.Previous = sentObjectIds.LastOrDefault();
|
||||
|
||||
largeObject.AppendBlock(buffer, bytesCount);
|
||||
|
||||
currentObject = new FrostFS.SDK.ModelsV2.Object(containerId, bytesCount < partSize ? buffer.Take(bytesCount).ToArray() : buffer)
|
||||
.AddAttribute(fileNameAttribute)
|
||||
.AddAttribute("type", $"part_{sentObjectIds.Count}")
|
||||
.SetSplit(split);
|
||||
|
||||
if (largeObject.PayloadLength == fullLength)
|
||||
break;
|
||||
|
||||
var objectId = await fsClient.PutSingleObjectAsync(currentObject);
|
||||
sentObjectIds.Add(objectId);
|
||||
}
|
||||
|
||||
if (sentObjectIds.Any())
|
||||
{
|
||||
largeObject.CalculateHash()
|
||||
.AddAttribute("type", $"ParentObject")
|
||||
.AddAttribute(fileNameAttribute);
|
||||
|
||||
currentObject.SetParent(largeObject);
|
||||
|
||||
var objectId = await fsClient.PutSingleObjectAsync(currentObject);
|
||||
sentObjectIds.Add(objectId);
|
||||
|
||||
var linkObject = new LinkObject(containerId, split.SplitId, largeObject)
|
||||
.AddChildren(sentObjectIds)
|
||||
.AddAttribute(fileNameAttribute)
|
||||
.AddAttribute("type", $"LinkedObject");
|
||||
|
||||
_ = await fsClient.PutSingleObjectAsync(linkObject);
|
||||
|
||||
//return fsClient.CalculateObjectId(largeObject.Header);
|
||||
|
||||
return currentObject.GetParentId();
|
||||
}
|
||||
|
||||
return await fsClient.PutSingleObjectAsync(currentObject);
|
||||
}
|
||||
|
||||
static void ShowFileInExplorer()
|
||||
{
|
||||
Directory.SetCurrentDirectory(@"C:\Users\p.gross\Pictures\samples");
|
||||
var currentDir = Directory.GetCurrentDirectory();
|
||||
Process.Start("explorer.exe", currentDir);
|
||||
}
|
||||
|
||||
static string GetBroFileName(string path)
|
||||
{
|
||||
var newName = Path.GetFileNameWithoutExtension(path) + "_bro" + Path.GetExtension(path);
|
||||
return newName;
|
||||
}
|
25
Sandbox.sln
Normal file
25
Sandbox.sln
Normal file
|
@ -0,0 +1,25 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.5.002.0
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "client", "client.csproj", "{7A901C7D-42E7-4AA4-8622-FC808CEDA60D}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{7A901C7D-42E7-4AA4-8622-FC808CEDA60D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{7A901C7D-42E7-4AA4-8622-FC808CEDA60D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{7A901C7D-42E7-4AA4-8622-FC808CEDA60D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{7A901C7D-42E7-4AA4-8622-FC808CEDA60D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {8438D170-FBBF-4F2A-B30A-9A7228114D89}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
|
@ -1,14 +1,29 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\FrostFS.SDK.ClientV2\FrostFS.SDK.ClientV2.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<LangVersion>12.0</LangVersion>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
<ItemGroup>
|
||||
<Reference Include="FrostFS.SDK.ClientV2.dll">
|
||||
<HintPath>netstandard2.0\FrostFS.SDK.ClientV2.dll</HintPath>
|
||||
</Reference>
|
||||
|
||||
<Reference Include="FrostFS.SDK.ModelsV2.dll">
|
||||
<HintPath>netstandard2.0\FrostFS.SDK.ModelsV2.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="System.Memory" Version="4.5.5" />
|
||||
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="8.0.0" />
|
||||
<PackageReference Include="BouncyCastle.Cryptography" Version="2.4.0" />
|
||||
<PackageReference Include="Google.Protobuf" Version="3.27.0" />
|
||||
<PackageReference Include="Grpc.Net.Client" Version="2.62.0" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
464
netstandard2.0/FrostFS.SDK.ClientV2.deps.json
Normal file
464
netstandard2.0/FrostFS.SDK.ClientV2.deps.json
Normal file
|
@ -0,0 +1,464 @@
|
|||
{
|
||||
"runtimeTarget": {
|
||||
"name": ".NETStandard,Version=v2.0/",
|
||||
"signature": ""
|
||||
},
|
||||
"compilationOptions": {},
|
||||
"targets": {
|
||||
".NETStandard,Version=v2.0": {},
|
||||
".NETStandard,Version=v2.0/": {
|
||||
"FrostFS.SDK.ClientV2/1.0.0": {
|
||||
"dependencies": {
|
||||
"FrostFS.SDK.Cryptography": "1.0.0",
|
||||
"FrostFS.SDK.ModelsV2": "1.0.0",
|
||||
"FrostFS.SDK.ProtosV2": "1.0.0",
|
||||
"Microsoft.Bcl.AsyncInterfaces": "8.0.0",
|
||||
"Moq.AutoMock": "3.5.0",
|
||||
"NETStandard.Library": "2.0.3"
|
||||
},
|
||||
"runtime": {
|
||||
"FrostFS.SDK.ClientV2.dll": {}
|
||||
}
|
||||
},
|
||||
"BouncyCastle.Cryptography/2.4.0": {
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/BouncyCastle.Cryptography.dll": {
|
||||
"assemblyVersion": "2.0.0.0",
|
||||
"fileVersion": "2.4.0.33771"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Castle.Core/5.1.1": {
|
||||
"dependencies": {
|
||||
"System.Diagnostics.EventLog": "4.7.0",
|
||||
"System.Reflection.Emit": "4.7.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Castle.Core.dll": {
|
||||
"assemblyVersion": "5.0.0.0",
|
||||
"fileVersion": "5.1.1.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Google.Protobuf/3.27.0": {
|
||||
"dependencies": {
|
||||
"System.Memory": "4.5.5",
|
||||
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Google.Protobuf.dll": {
|
||||
"assemblyVersion": "3.27.0.0",
|
||||
"fileVersion": "3.27.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Grpc.Core.Api/2.62.0": {
|
||||
"dependencies": {
|
||||
"System.Memory": "4.5.5"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Grpc.Core.Api.dll": {
|
||||
"assemblyVersion": "2.0.0.0",
|
||||
"fileVersion": "2.62.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Grpc.Net.Client/2.62.0": {
|
||||
"dependencies": {
|
||||
"Grpc.Net.Common": "2.62.0",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "6.0.0",
|
||||
"System.Diagnostics.DiagnosticSource": "6.0.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Grpc.Net.Client.dll": {
|
||||
"assemblyVersion": "2.0.0.0",
|
||||
"fileVersion": "2.62.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Grpc.Net.Common/2.62.0": {
|
||||
"dependencies": {
|
||||
"Grpc.Core.Api": "2.62.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Grpc.Net.Common.dll": {
|
||||
"assemblyVersion": "2.0.0.0",
|
||||
"fileVersion": "2.62.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Bcl.AsyncInterfaces/8.0.0": {
|
||||
"dependencies": {
|
||||
"System.Threading.Tasks.Extensions": "4.5.4"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Microsoft.Bcl.AsyncInterfaces.dll": {
|
||||
"assemblyVersion": "8.0.0.0",
|
||||
"fileVersion": "8.0.23.53103"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Logging.Abstractions/6.0.0": {
|
||||
"dependencies": {
|
||||
"System.Buffers": "4.5.1",
|
||||
"System.Memory": "4.5.5"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll": {
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.0.21.52210"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.NETCore.Platforms/1.1.0": {},
|
||||
"Moq/4.18.4": {
|
||||
"dependencies": {
|
||||
"Castle.Core": "5.1.1",
|
||||
"System.Threading.Tasks.Extensions": "4.5.4"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Moq.dll": {
|
||||
"assemblyVersion": "4.18.0.0",
|
||||
"fileVersion": "4.18.4.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Moq.AutoMock/3.5.0": {
|
||||
"dependencies": {
|
||||
"Moq": "4.18.4",
|
||||
"NonBlocking": "2.1.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Moq.AutoMock.dll": {
|
||||
"assemblyVersion": "3.5.0.0",
|
||||
"fileVersion": "3.5.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"NETStandard.Library/2.0.3": {
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.0"
|
||||
}
|
||||
},
|
||||
"NonBlocking/2.1.1": {
|
||||
"dependencies": {
|
||||
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/NonBlocking.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Buffers/4.5.1": {
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/System.Buffers.dll": {
|
||||
"assemblyVersion": "4.0.3.0",
|
||||
"fileVersion": "4.6.28619.1"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Diagnostics.DiagnosticSource/6.0.1": {
|
||||
"dependencies": {
|
||||
"System.Memory": "4.5.5",
|
||||
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/System.Diagnostics.DiagnosticSource.dll": {
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.0.1523.11507"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Diagnostics.EventLog/4.7.0": {
|
||||
"dependencies": {
|
||||
"System.Security.Principal.Windows": "4.7.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/System.Diagnostics.EventLog.dll": {
|
||||
"assemblyVersion": "4.0.2.0",
|
||||
"fileVersion": "4.700.19.56404"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Memory/4.5.5": {
|
||||
"dependencies": {
|
||||
"System.Buffers": "4.5.1",
|
||||
"System.Numerics.Vectors": "4.4.0",
|
||||
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/System.Memory.dll": {
|
||||
"assemblyVersion": "4.0.1.2",
|
||||
"fileVersion": "4.6.31308.1"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Numerics.Vectors/4.4.0": {
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/System.Numerics.Vectors.dll": {
|
||||
"assemblyVersion": "4.1.3.0",
|
||||
"fileVersion": "4.6.25519.3"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Reflection.Emit/4.7.0": {
|
||||
"dependencies": {
|
||||
"System.Reflection.Emit.ILGeneration": "4.7.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/System.Reflection.Emit.dll": {
|
||||
"assemblyVersion": "4.0.0.0",
|
||||
"fileVersion": "4.700.19.56404"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Reflection.Emit.ILGeneration/4.7.0": {
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/System.Reflection.Emit.ILGeneration.dll": {
|
||||
"assemblyVersion": "4.0.0.0",
|
||||
"fileVersion": "4.700.19.56404"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Runtime.CompilerServices.Unsafe/6.0.0": {
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll": {
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.0.21.52210"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Security.Principal.Windows/4.7.0": {
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/System.Security.Principal.Windows.dll": {
|
||||
"assemblyVersion": "4.1.3.0",
|
||||
"fileVersion": "4.700.19.56404"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Threading.Tasks.Extensions/4.5.4": {
|
||||
"dependencies": {
|
||||
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/System.Threading.Tasks.Extensions.dll": {
|
||||
"assemblyVersion": "4.2.0.1",
|
||||
"fileVersion": "4.6.28619.1"
|
||||
}
|
||||
}
|
||||
},
|
||||
"FrostFS.SDK.Cryptography/1.0.0": {
|
||||
"dependencies": {
|
||||
"BouncyCastle.Cryptography": "2.4.0",
|
||||
"Google.Protobuf": "3.27.0",
|
||||
"System.Memory": "4.5.5"
|
||||
},
|
||||
"runtime": {
|
||||
"FrostFS.SDK.Cryptography.dll": {}
|
||||
}
|
||||
},
|
||||
"FrostFS.SDK.ModelsV2/1.0.0": {
|
||||
"dependencies": {
|
||||
"FrostFS.SDK.Cryptography": "1.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"FrostFS.SDK.ModelsV2.dll": {}
|
||||
}
|
||||
},
|
||||
"FrostFS.SDK.ProtosV2/1.0.0": {
|
||||
"dependencies": {
|
||||
"Google.Protobuf": "3.27.0",
|
||||
"Grpc.Net.Client": "2.62.0"
|
||||
},
|
||||
"runtime": {
|
||||
"FrostFS.SDK.ProtosV2.dll": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
"FrostFS.SDK.ClientV2/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"BouncyCastle.Cryptography/2.4.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-SwXsAV3sMvAU/Nn31pbjhWurYSjJ+/giI/0n6tCrYoupEK34iIHCuk3STAd9fx8yudM85KkLSVdn951vTng/vQ==",
|
||||
"path": "bouncycastle.cryptography/2.4.0",
|
||||
"hashPath": "bouncycastle.cryptography.2.4.0.nupkg.sha512"
|
||||
},
|
||||
"Castle.Core/5.1.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-rpYtIczkzGpf+EkZgDr9CClTdemhsrwA/W5hMoPjLkRFnXzH44zDLoovXeKtmxb1ykXK9aJVODSpiJml8CTw2g==",
|
||||
"path": "castle.core/5.1.1",
|
||||
"hashPath": "castle.core.5.1.1.nupkg.sha512"
|
||||
},
|
||||
"Google.Protobuf/3.27.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-tEaKpc+SP7I3gYW9AHozESyKkrCg8Xe7huI3Q3iUt5t8Dn29r2k1u8jyrGrD16maj/0UsQBM0MDViWEj0iynOA==",
|
||||
"path": "google.protobuf/3.27.0",
|
||||
"hashPath": "google.protobuf.3.27.0.nupkg.sha512"
|
||||
},
|
||||
"Grpc.Core.Api/2.62.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-q4Jj6bRZHNnE4CMLqgjiBUCKLit+tRr0simZsS2W6U++akd7CzXByeKy2tddqT68hFzP2XzceXA2YtBTfWtixA==",
|
||||
"path": "grpc.core.api/2.62.0",
|
||||
"hashPath": "grpc.core.api.2.62.0.nupkg.sha512"
|
||||
},
|
||||
"Grpc.Net.Client/2.62.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-C7HxLt+wWPTpPFORRHkxxtDLL+K/jXSmZBaPLhFM8AEkN0bYjklIfCwnzajn1gcbRcEETBb0WnRgHJdVzpwbCg==",
|
||||
"path": "grpc.net.client/2.62.0",
|
||||
"hashPath": "grpc.net.client.2.62.0.nupkg.sha512"
|
||||
},
|
||||
"Grpc.Net.Common/2.62.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-eBv5I4RPWfdezGXqooU5hs3+XcfVMLk5XDlA4G/Nd9TMX78ZGrFl/lM1Ad187zgBLmH7WPAgfjKRWLBwaa1Wbw==",
|
||||
"path": "grpc.net.common/2.62.0",
|
||||
"hashPath": "grpc.net.common.2.62.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Bcl.AsyncInterfaces/8.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-3WA9q9yVqJp222P3x1wYIGDAkpjAku0TMUaaQV22g6L67AI0LdOIrVS7Ht2vJfLHGSPVuqN94vIr15qn+HEkHw==",
|
||||
"path": "microsoft.bcl.asyncinterfaces/8.0.0",
|
||||
"hashPath": "microsoft.bcl.asyncinterfaces.8.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Logging.Abstractions/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-/HggWBbTwy8TgebGSX5DBZ24ndhzi93sHUBDvP1IxbZD7FDokYzdAr6+vbWGjw2XAfR2EJ1sfKUotpjHnFWPxA==",
|
||||
"path": "microsoft.extensions.logging.abstractions/6.0.0",
|
||||
"hashPath": "microsoft.extensions.logging.abstractions.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.NETCore.Platforms/1.1.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==",
|
||||
"path": "microsoft.netcore.platforms/1.1.0",
|
||||
"hashPath": "microsoft.netcore.platforms.1.1.0.nupkg.sha512"
|
||||
},
|
||||
"Moq/4.18.4": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-IOo+W51+7Afnb0noltJrKxPBSfsgMzTKCw+Re5AMx8l/vBbAbMDOynLik4+lBYIWDJSO0uV7Zdqt7cNb6RZZ+A==",
|
||||
"path": "moq/4.18.4",
|
||||
"hashPath": "moq.4.18.4.nupkg.sha512"
|
||||
},
|
||||
"Moq.AutoMock/3.5.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-x5pBS+sDYxnDlyf/KVZKQJGLygYcT2745XImXPL12O0547l4jgfaEujGoPyEyjXyB9dmC+XCgYV5jLa7eFGZew==",
|
||||
"path": "moq.automock/3.5.0",
|
||||
"hashPath": "moq.automock.3.5.0.nupkg.sha512"
|
||||
},
|
||||
"NETStandard.Library/2.0.3": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==",
|
||||
"path": "netstandard.library/2.0.3",
|
||||
"hashPath": "netstandard.library.2.0.3.nupkg.sha512"
|
||||
},
|
||||
"NonBlocking/2.1.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-wCfoF5muN8Qx9Mz3IBsCb0qlViH2fAWTwzpHWp+vSBTxy2U3/5xW5+niLtSG3dXook3bN3U8hdEWRGHM0+5f5Q==",
|
||||
"path": "nonblocking/2.1.1",
|
||||
"hashPath": "nonblocking.2.1.1.nupkg.sha512"
|
||||
},
|
||||
"System.Buffers/4.5.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==",
|
||||
"path": "system.buffers/4.5.1",
|
||||
"hashPath": "system.buffers.4.5.1.nupkg.sha512"
|
||||
},
|
||||
"System.Diagnostics.DiagnosticSource/6.0.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-KiLYDu2k2J82Q9BJpWiuQqCkFjRBWVq4jDzKKWawVi9KWzyD0XG3cmfX0vqTQlL14Wi9EufJrbL0+KCLTbqWiQ==",
|
||||
"path": "system.diagnostics.diagnosticsource/6.0.1",
|
||||
"hashPath": "system.diagnostics.diagnosticsource.6.0.1.nupkg.sha512"
|
||||
},
|
||||
"System.Diagnostics.EventLog/4.7.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-iDoKGQcRwX0qwY+eAEkaJGae0d/lHlxtslO+t8pJWAUxlvY3tqLtVOPnW2UU4cFjP0Y/L1QBqhkZfSyGqVMR2w==",
|
||||
"path": "system.diagnostics.eventlog/4.7.0",
|
||||
"hashPath": "system.diagnostics.eventlog.4.7.0.nupkg.sha512"
|
||||
},
|
||||
"System.Memory/4.5.5": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==",
|
||||
"path": "system.memory/4.5.5",
|
||||
"hashPath": "system.memory.4.5.5.nupkg.sha512"
|
||||
},
|
||||
"System.Numerics.Vectors/4.4.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ==",
|
||||
"path": "system.numerics.vectors/4.4.0",
|
||||
"hashPath": "system.numerics.vectors.4.4.0.nupkg.sha512"
|
||||
},
|
||||
"System.Reflection.Emit/4.7.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-VR4kk8XLKebQ4MZuKuIni/7oh+QGFmZW3qORd1GvBq/8026OpW501SzT/oypwiQl4TvT8ErnReh/NzY9u+C6wQ==",
|
||||
"path": "system.reflection.emit/4.7.0",
|
||||
"hashPath": "system.reflection.emit.4.7.0.nupkg.sha512"
|
||||
},
|
||||
"System.Reflection.Emit.ILGeneration/4.7.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-AucBYo3DSI0IDxdUjKksBcQJXPHyoPyrCXYURW1WDsLI4M65Ar/goSHjdnHOAY9MiYDNKqDlIgaYm+zL2hA1KA==",
|
||||
"path": "system.reflection.emit.ilgeneration/4.7.0",
|
||||
"hashPath": "system.reflection.emit.ilgeneration.4.7.0.nupkg.sha512"
|
||||
},
|
||||
"System.Runtime.CompilerServices.Unsafe/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==",
|
||||
"path": "system.runtime.compilerservices.unsafe/6.0.0",
|
||||
"hashPath": "system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Security.Principal.Windows/4.7.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-ojD0PX0XhneCsUbAZVKdb7h/70vyYMDYs85lwEI+LngEONe/17A0cFaRFqZU+sOEidcVswYWikYOQ9PPfjlbtQ==",
|
||||
"path": "system.security.principal.windows/4.7.0",
|
||||
"hashPath": "system.security.principal.windows.4.7.0.nupkg.sha512"
|
||||
},
|
||||
"System.Threading.Tasks.Extensions/4.5.4": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==",
|
||||
"path": "system.threading.tasks.extensions/4.5.4",
|
||||
"hashPath": "system.threading.tasks.extensions.4.5.4.nupkg.sha512"
|
||||
},
|
||||
"FrostFS.SDK.Cryptography/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"FrostFS.SDK.ModelsV2/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"FrostFS.SDK.ProtosV2/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue