mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-07-15 07:56:11 +08:00
61 lines
1.2 KiB
Dart
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;
|
|
}
|
|
}
|