(writers *Writers, kv *bpb.KV, format string)
| 696 | } |
| 697 | |
| 698 | func WriteExport(writers *Writers, kv *bpb.KV, format string) error { |
| 699 | // Skip nodes that have no data. Otherwise, the exported data could have |
| 700 | // formatting and/or syntax errors. |
| 701 | if len(kv.Value) == 0 { |
| 702 | return nil |
| 703 | } |
| 704 | |
| 705 | var dataSeparator []byte |
| 706 | switch format { |
| 707 | case "json": |
| 708 | dataSeparator = []byte(",\n") |
| 709 | case "rdf": |
| 710 | // The separator for RDF should be empty since the toRDF function already |
| 711 | // adds newline to each RDF entry. |
| 712 | default: |
| 713 | glog.Fatalf("Invalid export format found: %s", format) |
| 714 | } |
| 715 | |
| 716 | var writer *ExportWriter |
| 717 | var sep []byte |
| 718 | switch kv.Version { |
| 719 | case 1: // data |
| 720 | writer = writers.DataWriter |
| 721 | sep = dataSeparator |
| 722 | case 2: // graphQL schema |
| 723 | writer = writers.GqlSchemaWriter |
| 724 | sep = []byte(",\n") // use json separator. |
| 725 | case 3: // graphQL schema |
| 726 | writer = writers.SchemaWriter |
| 727 | default: |
| 728 | glog.Fatalf("Invalid data type found: %x", kv.Key) |
| 729 | } |
| 730 | |
| 731 | if writer.hasDataBefore { |
| 732 | if _, err := writer.gw.Write(sep); err != nil { |
| 733 | return err |
| 734 | } |
| 735 | } |
| 736 | // change the hasDataBefore flag so that the next data entry will have a separator |
| 737 | // prepended |
| 738 | writer.hasDataBefore = true |
| 739 | |
| 740 | _, err := writer.gw.Write(kv.Value) |
| 741 | return err |
| 742 | } |
| 743 | |
| 744 | type Writers struct { |
| 745 | DataWriter *ExportWriter |
no test coverage detected