Files
GitJournal/lib/serializers.dart
Vishesh Handa fdf8c06c24 Add Note serializers
This way we don't only need to use json.
2018-06-01 18:57:53 +02:00

61 lines
1.2 KiB
Dart

import 'dart:convert';
import 'package:yaml/yaml.dart';
import 'package:journal/note.dart';
abstract class NoteSerializer {
String encode(Note note);
Note decode(String str);
}
class JsonNoteSerializer implements NoteSerializer {
@override
Note decode(String str) {
final json = JsonDecoder().convert(str);
return new Note.fromJson(json);
}
@override
String encode(Note note) {
return JsonEncoder().convert(note.toJson());
}
}
class MarkdownYAMLSerializer implements NoteSerializer {
@override
Note decode(String str) {
if (str.startsWith("---\n")) {
var parts = str.split("---\n");
var yamlMap = loadYaml(parts[1]);
Map<String, dynamic> map = new Map<String, dynamic>();
yamlMap.forEach((key, value) {
map[key] = value;
});
map['body'] = parts[2].trimLeft();
return new Note.fromJson(map);
}
return new Note(body: str);
}
@override
String encode(Note note) {
const serparator = '---\n';
var str = "";
str += serparator;
var metadata = note.toJson();
metadata.remove('body');
metadata.forEach((key, value) {
str += key + ": " + value + "\n";
});
str += serparator;
str += '\n';
str += note.body;
return str;
}
}