logger_result 0.0.2
logger_result: ^0.0.2 copied to clipboard
logger_result is result and logger library for dart.
example/main.dart
import 'package:logger_result/logger_result.dart';
void main() {
final Type? classLocation = null;
const functionLocation = 'main';
Map<String, dynamic> monitor = {};
Map<String, dynamic> debug = {};
List<Log> histories = [];
final example = Example();
final function1Result = example.function1(1);
histories.add(function1Result);
final function2Result = example.function2('a');
histories.add(function2Result);
final function3Result = example.function3('b');
histories.add(function3Result);
final function4Result = example.function4(1);
histories.add(function4Result);
final result = Safety(Complete(), classLocation, functionLocation, monitor, debug, histories);
final formatterA = Formatter.loggerResultDefault(result);
print('--- デフォルトの整形形式 ---');
print(formatterA.baseToYamlString());
final formatterB = Formatter.toYamlString(result.toJson());
print('--- 整形無しで yaml で表示 ---');
print(formatterB);
final formatterC = Formatter.toJsonString(result.toJson());
print('--- 整形無しで json で表示 ---');
print(formatterC);
}
class Example
{
Result<int, Exception> function0(int number) {
final classLocation = runtimeType;
const functionLocation = 'function0';
Map<String, dynamic> monitor = {};
Map<String, dynamic> debug = {};
List<Log> histories = [];
// Error を throw したいときは Panic に wrap して throw する.
if (number == 99.99) throw Panic(Error(), classLocation, functionLocation, monitor, debug, histories);
if (number == 0) return Failure(Exception(), classLocation, functionLocation, monitor, debug, histories);
return Success(number, classLocation, functionLocation, monitor, debug, histories);
}
// Complete は void の代わりに利用する.
// 何か任意のメッセージを log に残したい場合 loggerResultMessage に List<String> 型で 値を代入する.
Result<int, Exception> function1(int number) {
final classLocation = runtimeType;
const functionLocation = 'function1';
Map<String, dynamic> monitor = {};
Map<String, dynamic> debug = {};
List<Log> histories = [];
final function0Result = function0(number);
histories.add(function0Result);
// 下記の code の syntax sugar.
// switch (function0Result) {
// case Success(asValue: final value):
// return Success(value, classLocation, functionLocation, monitor, debug, histories);
// case Failure(asError: final error):
// return Failure(error, classLocation, functionLocation, monitor, debug, histories);
// }
return Result.fromResult(function0Result, classLocation, functionLocation, monitor, debug, histories);
}
Result<String, Exception> function2(String string) {
final classLocation = runtimeType;
const functionLocation = 'function2';
Map<String, dynamic> monitor = {};
Map<String, dynamic> debug = {};
List<Log> histories = [];
// monitor に追加された値は、debug 実行時、本番実行時ともに、log として記録される.
monitor.addAll({
'input_value': string,
});
// debug に追加された値は debug 実行時のみ、 log として記録される.
debug.addAll({
'input_value': string,
});
if (string.isEmpty) return Failure(Exception(), classLocation, functionLocation, monitor, debug, histories);
return Success(string, classLocation, functionLocation, monitor, debug, histories);
}
// Safety は Exception が発生しない場合に利用する.
Safety<String> function3(String string) {
final classLocation = runtimeType;
const functionLocation = 'function3';
Map<String, dynamic> monitor = {};
Map<String, dynamic> debug = {};
List<Log> histories = [];
return Safety(string, classLocation, functionLocation, monitor, debug, histories);
}
Result<int, Exception> function4(int number) {
final classLocation = runtimeType;
const functionLocation = 'function4';
Map<String, dynamic> monitor = {};
Map<String, dynamic> debug = {};
List<Log> histories = [];
final function0Result = function0(number);
histories.add(function0Result);
// これ以降 function4Result は Success 型として解釈される.
if (function0Result is! Success<int, Exception>) return Failure(function0Result.asError!, classLocation, functionLocation, monitor, debug, histories);
return Success(function0Result.wrapped, classLocation, functionLocation, monitor, debug, histories);
}
}