4
4
"bytes"
5
5
"context"
6
6
"embed"
7
+ "encoding/base64"
7
8
"encoding/json"
8
9
"fmt"
9
10
"html/template"
@@ -358,12 +359,27 @@ func (app *App) LuaIoGenbankParse(L *lua.LState) int {
358
359
}
359
360
360
361
func (app * App ) PostIoGenbankWrite (ctx context.Context , request gen.PostIoGenbankWriteRequestObject ) (gen.PostIoGenbankWriteResponseObject , error ) {
361
- return nil , nil
362
+ var w bytes.Buffer
363
+ for _ , genbankRecord := range * request .Body {
364
+ genbankStruct := ConvertGenbankRecordToGenbank (genbankRecord )
365
+ _ , _ = genbankStruct .WriteTo (& w )
366
+ }
367
+ return gen .PostIoGenbankWrite200TextResponse (w .String ()), nil
362
368
}
363
369
func (app * App ) LuaIoGenbankWrite (L * lua.LState ) int { return 0 }
364
370
365
371
func (app * App ) PostIoFastqParse (ctx context.Context , request gen.PostIoFastqParseRequestObject ) (gen.PostIoFastqParseResponseObject , error ) {
366
- return nil , nil
372
+ fastqString := * request .Body
373
+ parser := bio .NewFastqParser (strings .NewReader (fastqString + "\n " ))
374
+ fastqs , err := parser .Parse ()
375
+ if err != nil {
376
+ return gen .PostIoFastqParse500TextResponse (fmt .Sprintf ("Got error: %s" , err )), nil
377
+ }
378
+ data := make ([]gen.FastqRead , len (fastqs ))
379
+ for i , fastqRead := range fastqs {
380
+ data [i ] = gen.FastqRead {Identifier : fastqRead .Identifier , Optionals : & fastqRead .Optionals , Sequence : fastqRead .Sequence , Quality : fastqRead .Quality }
381
+ }
382
+ return gen .PostIoFastqParse200JSONResponse (data ), nil
367
383
}
368
384
func (app * App ) LuaIoFastqParse (L * lua.LState ) int { return 0 }
369
385
@@ -378,7 +394,20 @@ func (app *App) PostIoFastqWrite(ctx context.Context, request gen.PostIoFastqWri
378
394
func (app * App ) LuaIoFastqWrite (L * lua.LState ) int { return 0 }
379
395
380
396
func (app * App ) PostIoSlow5Parse (ctx context.Context , request gen.PostIoSlow5ParseRequestObject ) (gen.PostIoSlow5ParseResponseObject , error ) {
381
- return nil , nil
397
+ slow5String := * request .Body
398
+ parser , err := bio .NewSlow5Parser (strings .NewReader (slow5String ))
399
+ if err != nil {
400
+ return gen .PostIoSlow5Parse500TextResponse (fmt .Sprintf ("Got error: %s" , err )), nil
401
+ }
402
+ reads , header , err := parser .ParseWithHeader ()
403
+ if err != nil {
404
+ return gen .PostIoSlow5Parse500TextResponse (fmt .Sprintf ("Got error: %s" , err )), nil
405
+ }
406
+ data := make ([]gen.Slow5Read , len (reads ))
407
+ for i , read := range reads {
408
+ data [i ] = ConvertReadToSlow5Read (read )
409
+ }
410
+ return gen .PostIoSlow5Parse200JSONResponse (gen.PostIoSlow5WriteJSONBody {Header : ConvertToGenSlow5Header (header ), Reads : data }), nil
382
411
}
383
412
func (app * App ) LuaIoSlow5Parse (L * lua.LState ) int { return 0 }
384
413
@@ -392,7 +421,7 @@ func (app *App) PostIoSlow5Write(ctx context.Context, request gen.PostIoSlow5Wri
392
421
header := slow5.Header {HeaderValues : headerValues }
393
422
reads := request .Body .Reads
394
423
_ , _ = header .WriteTo (& w )
395
- for _ , read := range * reads {
424
+ for _ , read := range reads {
396
425
slow5Struct := ConvertSlow5ReadToRead (read )
397
426
_ , _ = slow5Struct .WriteTo (& w )
398
427
}
@@ -401,17 +430,52 @@ func (app *App) PostIoSlow5Write(ctx context.Context, request gen.PostIoSlow5Wri
401
430
func (app * App ) LuaIoSlow5Write (L * lua.LState ) int { return 0 }
402
431
403
432
func (app * App ) PostIoSlow5SvbCompress (ctx context.Context , request gen.PostIoSlow5SvbCompressRequestObject ) (gen.PostIoSlow5SvbCompressResponseObject , error ) {
404
- return nil , nil
433
+ input := * request .Body
434
+ rawSignal := make ([]int16 , len (input .RawSignal ))
435
+ for i , integer := range input .RawSignal {
436
+ rawSignal [i ] = int16 (integer )
437
+ }
438
+ mask , data := slow5 .SvbCompressRawSignal (rawSignal )
439
+ encodedMask := base64 .StdEncoding .EncodeToString (mask )
440
+ encodedData := base64 .StdEncoding .EncodeToString (data )
441
+
442
+ return gen.PostIoSlow5SvbCompress200JSONResponse {Mask : encodedMask , Data : encodedData , LenRawSignal : len (rawSignal )}, nil
405
443
}
406
444
func (app * App ) LuaIoSlow5SvbCompress (L * lua.LState ) int { return 0 }
407
445
408
446
func (app * App ) PostIoSlow5SvbDecompress (ctx context.Context , request gen.PostIoSlow5SvbDecompressRequestObject ) (gen.PostIoSlow5SvbDecompressResponseObject , error ) {
409
- return nil , nil
447
+ input := * request .Body
448
+ decodedMask , err := base64 .StdEncoding .DecodeString (input .Mask )
449
+ if err != nil {
450
+ return gen .PostIoSlow5SvbDecompress500TextResponse (fmt .Sprintf ("Failed to base64 decode mask. Got err: %s" , err )), nil
451
+ }
452
+
453
+ decodedData , err := base64 .StdEncoding .DecodeString (input .Data )
454
+ if err != nil {
455
+ return gen .PostIoSlow5SvbDecompress500TextResponse (fmt .Sprintf ("Failed to base64 decode data. Got err: %s" , err )), nil
456
+ }
457
+
458
+ rawSignal := slow5 .SvbDecompressRawSignal (input .LenRawSignal , decodedMask , decodedData )
459
+ intRawSignal := make ([]int , len (rawSignal ))
460
+ for i , integer := range rawSignal {
461
+ intRawSignal [i ] = int (integer )
462
+ }
463
+ return gen.PostIoSlow5SvbDecompress200JSONResponse {RawSignal : intRawSignal }, nil
410
464
}
411
465
func (app * App ) LuaIoSlow5SvbDecompress (L * lua.LState ) int { return 0 }
412
466
413
467
func (app * App ) PostIoPileupParse (ctx context.Context , request gen.PostIoPileupParseRequestObject ) (gen.PostIoPileupParseResponseObject , error ) {
414
- return nil , nil
468
+ pileupString := * request .Body
469
+ parser := bio .NewPileupParser (strings .NewReader (pileupString ))
470
+ pileups , err := parser .Parse ()
471
+ if err != nil {
472
+ return gen .PostIoPileupParse500TextResponse (fmt .Sprintf ("Got error: %s" , err )), nil
473
+ }
474
+ data := make ([]gen.PileupLine , len (pileups ))
475
+ for i , pileupRead := range pileups {
476
+ data [i ] = gen.PileupLine {Sequence : pileupRead .Sequence , Position : int (pileupRead .Position ), ReferenceBase : pileupRead .ReferenceBase , ReadCount : int (pileupRead .ReadCount ), ReadResults : pileupRead .ReadResults , Quality : pileupRead .Quality }
477
+ }
478
+ return gen .PostIoPileupParse200JSONResponse (data ), nil
415
479
}
416
480
func (app * App ) LuaIoPileupParse (L * lua.LState ) int { return 0 }
417
481
0 commit comments