99using System . Threading ;
1010using System . Threading . Tasks ;
1111using Ipfs . CoreApi ;
12-
12+ using System . Globalization ;
13+
1314namespace Ipfs . Api
1415{
1516
@@ -23,14 +24,76 @@ internal DagApi(IpfsClient ipfs)
2324 }
2425
2526
26- public Task < Cid > PutAsync ( ILinkedNode data , string contentType , string multiHash = MultiHash . DefaultAlgorithmName , CancellationToken cancel = default ( CancellationToken ) )
27- {
28- throw new NotImplementedException ( ) ;
29- }
30-
31- Task < ILinkedNode > IDagApi . GetAsync ( string path , CancellationToken cancel )
27+ public async Task < Cid > PutAsync (
28+ JObject data ,
29+ string contentType = "cbor" ,
30+ string multiHash = MultiHash . DefaultAlgorithmName ,
31+ bool pin = true ,
32+ CancellationToken cancel = default ( CancellationToken ) )
3233 {
33- throw new NotImplementedException ( ) ;
34+ using ( var ms = new MemoryStream ( ) )
35+ {
36+ using ( var sw = new StreamWriter ( ms , new UTF8Encoding ( false ) , 4096 , true ) { AutoFlush = true } )
37+ using ( var jw = new JsonTextWriter ( sw ) )
38+ {
39+ var serializer = new JsonSerializer
40+ {
41+ Culture = CultureInfo . InvariantCulture
42+ } ;
43+ serializer . Serialize ( jw , data ) ;
44+ }
45+ ms . Position = 0 ;
46+ return await PutAsync ( ms , contentType , multiHash , pin , cancel ) ;
47+ }
48+ }
49+
50+ public async Task < Cid > PutAsync ( object data , string contentType = "cbor" , string multiHash = "sha2-256" , bool pin = true , CancellationToken cancel = default ( CancellationToken ) )
51+ {
52+ using ( var ms = new MemoryStream (
53+ Encoding . UTF8 . GetBytes ( JsonConvert . SerializeObject ( data ) ) ,
54+ false ) )
55+ {
56+ return await PutAsync ( ms , contentType , multiHash , pin , cancel ) ;
57+ }
3458 }
59+
60+ public async Task < Cid > PutAsync (
61+ Stream data ,
62+ string contentType = "cbor" ,
63+ string multiHash = "sha2-256" ,
64+ bool pin = true ,
65+ CancellationToken cancel = default ( CancellationToken ) )
66+ {
67+ var json = await ipfs . UploadAsync ( "dag/put" , cancel ,
68+ data , null ,
69+ $ "format={ contentType } ",
70+ $ "pin={ pin . ToString ( ) . ToLowerInvariant ( ) } ",
71+ $ "hash={ multiHash } ") ;
72+ var result = JObject . Parse ( json ) ;
73+ return ( Cid ) ( string ) result [ "Cid" ] [ "/" ] ;
74+ }
75+
76+ public async Task < JObject > GetAsync (
77+ Cid id ,
78+ CancellationToken cancel = default ( CancellationToken ) )
79+ {
80+ var json = await ipfs . DoCommandAsync ( "dag/get" , cancel , id ) ;
81+ return JObject . Parse ( json ) ;
82+ }
83+
84+
85+ public async Task < JToken > GetAsync (
86+ string path ,
87+ CancellationToken cancel = default ( CancellationToken ) )
88+ {
89+ var json = await ipfs . DoCommandAsync ( "dag/get" , cancel , path ) ;
90+ return JToken . Parse ( json ) ;
91+ }
92+
93+ public async Task < T > GetAsync < T > ( Cid id , CancellationToken cancel = default ( CancellationToken ) )
94+ {
95+ var json = await ipfs . DoCommandAsync ( "dag/get" , cancel , id ) ;
96+ return JsonConvert . DeserializeObject < T > ( json ) ;
97+ }
3598 }
3699}
0 commit comments