Index: packages/when/example/read_json_file.dart |
diff --git a/packages/when/example/read_json_file.dart b/packages/when/example/read_json_file.dart |
new file mode 100755 |
index 0000000000000000000000000000000000000000..3092ac8108dffb176cd460b516834bf82aadb3c2 |
--- /dev/null |
+++ b/packages/when/example/read_json_file.dart |
@@ -0,0 +1,38 @@ |
+ |
+library when.example.read_json_file; |
+ |
+import 'dart:async'; |
+import 'dart:convert'; |
+import 'dart:io'; |
+ |
+import 'package:when/when.dart'; |
+ |
+/// Reads and decodes JSON from [path] asynchronously. |
+/// |
+/// If [path] does not exist, returns the result of calling [onAbsent]. |
+Future readJsonFile(String path, {onAbsent()}) => _readJsonFile( |
+ path, onAbsent, (file) => file.exists(), (file) => file.readAsString()); |
+ |
+/// Reads and decodes JSON from [path] synchronously. |
+/// |
+/// If [path] does not exist, returns the result of calling [onAbsent]. |
+readJsonFileSync(String path, {onAbsent()}) => _readJsonFile( |
+ path, onAbsent, (file) => file.existsSync(), |
+ (file) => file.readAsStringSync()); |
+ |
+_readJsonFile(String path, onAbsent(), exists(File file), read(File file)) { |
+ var file = new File(path); |
+ return when( |
+ () => exists(file), |
+ onSuccess: (doesExist) => doesExist ? |
+ when(() => read(file), onSuccess: JSON.decode) : |
+ onAbsent()); |
+} |
+ |
+main() { |
+ var syncJson = readJsonFileSync('foo.json', onAbsent: () => {'foo': 'bar'}); |
+ print('Sync json: $syncJson'); |
+ readJsonFile('foo.json', onAbsent: () => {'foo': 'bar'}).then((asyncJson) { |
+ print('Async json: $asyncJson'); |
+ }); |
+} |