@@ -204,12 +204,23 @@ This command outputs data in the following encodings:
204
204
* "protobuf"
205
205
* "json"
206
206
* "xml"
207
- (Specified by the "--encoding" or "--enc" flag)` ,
207
+ (Specified by the "--encoding" or "--enc" flag)
208
+
209
+ The encoding of the object's data field can be specifed by using the
210
+ --data-encoding flag
211
+
212
+ Supported values are:
213
+ * "text" (default)
214
+ * "base64"
215
+ ` ,
208
216
},
209
217
210
218
Arguments : []cmdkit.Argument {
211
219
cmdkit .StringArg ("key" , true , false , "Key of the object to retrieve, in base58-encoded multihash format." ).EnableStdin (),
212
220
},
221
+ Options : []cmdkit.Option {
222
+ cmdkit .StringOption ("data-encoding" , "Encoding type of the data field, either \" text\" or \" base64\" ." ).WithDefault ("text" ),
223
+ },
213
224
Run : func (req oldcmds.Request , res oldcmds.Response ) {
214
225
n , err := req .InvocContext ().GetNode ()
215
226
if err != nil {
@@ -219,6 +230,12 @@ This command outputs data in the following encodings:
219
230
220
231
fpath := path .Path (req .Arguments ()[0 ])
221
232
233
+ datafieldenc , _ , err := req .Option ("data-encoding" ).String ()
234
+ if err != nil {
235
+ res .SetError (err , cmdkit .ErrNormal )
236
+ return
237
+ }
238
+
222
239
object , err := core .Resolve (req .Context (), n .Namesys , n .Resolver , fpath )
223
240
if err != nil {
224
241
res .SetError (err , cmdkit .ErrNormal )
@@ -231,9 +248,15 @@ This command outputs data in the following encodings:
231
248
return
232
249
}
233
250
251
+ data , err := encodeData (pbo .Data (), datafieldenc )
252
+ if err != nil {
253
+ res .SetError (err , cmdkit .ErrNormal )
254
+ return
255
+ }
256
+
234
257
node := & Node {
235
258
Links : make ([]Link , len (object .Links ())),
236
- Data : string ( pbo . Data ()) ,
259
+ Data : data ,
237
260
}
238
261
239
262
for i , link := range object .Links () {
@@ -702,3 +725,14 @@ func unwrapOutput(i interface{}) (interface{}, error) {
702
725
703
726
return <- ch , nil
704
727
}
728
+
729
+ func encodeData (data []byte , encoding string ) (string , error ) {
730
+ switch encoding {
731
+ case "text" :
732
+ return string (data ), nil
733
+ case "base64" :
734
+ return base64 .StdEncoding .EncodeToString (data ), nil
735
+ }
736
+
737
+ return "" , fmt .Errorf ("unkown data field encoding" )
738
+ }
0 commit comments