in wstl1/tools/notebook/extensions/wstl/service/wstlserver/validate.go [40:82]
func (v *Validator) Validate(ctx context.Context, req *wspb.ValidationRequest) (*wspb.ValidationResponse, error) {
if req == nil || len(req.GetInput()) == 0 {
return nil, status.Error(codes.InvalidArgument, "no resource provided")
}
var version fhirversion.Version
switch req.GetFhirVersion() {
case wspb.ValidationRequest_FHIR_VERSION_UNSPECIFIED:
version = fhirversion.R4
case wspb.ValidationRequest_R4:
version = fhirversion.R4
case wspb.ValidationRequest_STU3:
version = fhirversion.STU3
}
unMar, err := jsonformat.NewUnmarshaller("UTC", version)
inSrc := req.GetInput()
var res []*spb.Status
if err != nil {
return nil, status.Error(codes.Internal, err.Error())
}
for _, src := range inSrc {
switch s := src.GetLocation().(type) {
case *wspb.Location_GcsLocation:
return nil, status.Error(codes.Unimplemented, "GCS source not implemented yet")
case *wspb.Location_InlineJson:
_, err := unMar.Unmarshal([]byte(s.InlineJson))
if err != nil {
rStatus := status.New(codes.InvalidArgument, "invalid FHIR resource")
details := status.New(codes.InvalidArgument, err.Error())
if dStatus, dErr := rStatus.WithDetails(details.Proto()); dErr == nil {
res = append(res, dStatus.Proto())
} else {
res = append(res, rStatus.Proto())
}
} else {
res = append(res, status.New(codes.OK, "Validation Success").Proto())
}
default:
return nil, status.Error(codes.InvalidArgument, "Invalid resource type")
}
}
return &wspb.ValidationResponse{Status: res}, nil
}