From 5523ce1b8ec7e05926f3847d92bd94e3ad52a10f Mon Sep 17 00:00:00 2001 From: Matt Straathof Date: Thu, 14 Dec 2023 14:52:25 -0800 Subject: [PATCH] chore: plumb through publish command --- lib/client_sdk_dart.dart | 2 +- lib/src/client_sdk_dart_base.dart | 31 ------------ lib/src/errors/errors.dart | 45 ++++++++--------- lib/src/internal/pubsub_client.dart | 28 +++++------ lib/src/messages/Values.dart | 12 +++++ .../messages/responses/responses_base.dart | 13 +---- .../responses/topics/topic_publish.dart | 2 +- lib/src/topic_client.dart | 48 +++++-------------- test/client_sdk_dart_test.dart | 16 ------- 9 files changed, 58 insertions(+), 139 deletions(-) delete mode 100644 lib/src/client_sdk_dart_base.dart create mode 100644 lib/src/messages/Values.dart delete mode 100644 test/client_sdk_dart_test.dart diff --git a/lib/client_sdk_dart.dart b/lib/client_sdk_dart.dart index ebdf0d2..6c393d2 100644 --- a/lib/client_sdk_dart.dart +++ b/lib/client_sdk_dart.dart @@ -3,6 +3,6 @@ /// More dartdocs go here. library; -export 'src/client_sdk_dart_base.dart'; +export 'src/topic_client.dart'; // TODO: Export any libraries intended for clients of this package. diff --git a/lib/src/client_sdk_dart_base.dart b/lib/src/client_sdk_dart_base.dart deleted file mode 100644 index 86531d5..0000000 --- a/lib/src/client_sdk_dart_base.dart +++ /dev/null @@ -1,31 +0,0 @@ -// TODO: Put public facing types in this file. - -import '../generated/cachepubsub.pb.dart'; -import 'package:grpc/grpc.dart'; - -abstract class ITopicClient { - void publish(); -} - -class TopicClient implements ITopicClient { - ClientChannel _channel; - - TopicClient() { - _channel = ClientChannel(host) - } - @override - void publish() { - // TODO: implement publish - } - - void close() { - - } -} - -/// Checks if you are awesome. Spoiler: you are. -class Awesome { - bool get isAwesome => true; -} - -PubsubApi api = PubsubApi(); \ No newline at end of file diff --git a/lib/src/errors/errors.dart b/lib/src/errors/errors.dart index 234db02..032a9e2 100644 --- a/lib/src/errors/errors.dart +++ b/lib/src/errors/errors.dart @@ -1,31 +1,26 @@ -abstract class AbstractErrorResponseBase { - String _message; - Error? _innerException; - AbstractErrorResponseBase(this._message, this._innerException); - - String get message => _message; - Error? get innerException => _innerException; +enum MomentoErrorCode { + INVALID_ARGUMENT_ERROR, + UNKNOWN_SERVICE_ERROR, + ALREADY_EXISTS_ERROR, + NOT_FOUND_ERROR, } -class SdkError implements Error, AbstractErrorResponseBase { - @override - // TODO: implement stackTrace - StackTrace? get stackTrace => _innerException?.stackTrace; - - @override - Error? _innerException; +abstract class AbstractExceptionResponseBase { + final String _message; + final Exception? _innerException; + AbstractExceptionResponseBase(this._message, this._innerException); - @override - String _message; - - SdkError(this._message, this._innerException); + String get message => _message; + Exception? get innerException => _innerException; +} - @override - // TODO: implement innerException - Error? get innerException => _innerException; +class SdkException extends AbstractExceptionResponseBase implements Exception { + String _messageWrapper; + SdkException(String message, Exception? innerException, String messageWrapper) : _messageWrapper = messageWrapper, super(message, innerException); - @override - // TODO: implement message - String get message => _message; + String get messageWrapper => _messageWrapper; +} -} \ No newline at end of file +class UnknownException extends SdkException { + UnknownException(String message, Exception? innerException) : super(message, innerException, "Unknown error has occurred"); +} diff --git a/lib/src/internal/pubsub_client.dart b/lib/src/internal/pubsub_client.dart index d950fa5..a643d36 100644 --- a/lib/src/internal/pubsub_client.dart +++ b/lib/src/internal/pubsub_client.dart @@ -3,24 +3,12 @@ import 'dart:typed_data'; import 'package:client_sdk_dart/generated/cachepubsub.pb.dart'; import 'package:client_sdk_dart/generated/cachepubsub.pbgrpc.dart'; import 'package:client_sdk_dart/src/auth/credential_provider.dart'; +import 'package:client_sdk_dart/src/errors/errors.dart'; import 'package:grpc/grpc.dart'; -import 'package:protobuf/protobuf.dart'; +import '../messages/Values.dart'; import '../messages/responses/topics/topic_publish.dart'; -sealed class Value {} -class StringValue implements Value { - String _value; - StringValue(String v) : _value = v; - String get value => _value; -} - -class BinaryValue implements Value { - List _value; - BinaryValue(List v) : _value = v; - List get value => _value; -} - abstract class AbstractPubsubClient { Future publish(String cacheName, String topicName, Value value); } @@ -40,9 +28,15 @@ class ClientPubsub implements AbstractPubsubClient { request.cacheName = cacheName; request.topic = topicName; request.value = _valueToTopicValue(value); - await _client.publish(request); - // TODO: implement publish - throw UnimplementedError(); + try { + await _client.publish(request); + return TopicPublishSuccess(); + } catch (e) { + if (e is SdkException) { + return TopicPublishError(e); + } + return TopicPublishError(UnknownException("Unexpected error: $e", null)); + } } TopicValue_ _valueToTopicValue(Value v) { diff --git a/lib/src/messages/Values.dart b/lib/src/messages/Values.dart new file mode 100644 index 0000000..93e0c5c --- /dev/null +++ b/lib/src/messages/Values.dart @@ -0,0 +1,12 @@ +sealed class Value {} +class StringValue implements Value { + String _value; + StringValue(String v) : _value = v; + String get value => _value; +} + +class BinaryValue implements Value { + List _value; + BinaryValue(List v) : _value = v; + List get value => _value; +} diff --git a/lib/src/messages/responses/responses_base.dart b/lib/src/messages/responses/responses_base.dart index e45d111..955624f 100644 --- a/lib/src/messages/responses/responses_base.dart +++ b/lib/src/messages/responses/responses_base.dart @@ -1,14 +1,5 @@ import '../../errors/errors.dart'; -class ErrorResponseBase implements AbstractErrorResponseBase { - String _message; - Error? _innerException; - - @override - Error? get innerException => _innerException; - - @override - String get message => _message; - - ErrorResponseBase(SdkError error) : _message = error.message, _innerException = error.innerException; +class ErrorResponseBase extends AbstractExceptionResponseBase { + ErrorResponseBase(SdkException exception) : super(exception.message, exception.innerException); } \ No newline at end of file diff --git a/lib/src/messages/responses/topics/topic_publish.dart b/lib/src/messages/responses/topics/topic_publish.dart index 595316d..7aa2f58 100644 --- a/lib/src/messages/responses/topics/topic_publish.dart +++ b/lib/src/messages/responses/topics/topic_publish.dart @@ -5,5 +5,5 @@ sealed class TopicPublishResponse {} class TopicPublishSuccess implements TopicPublishResponse { } class TopicPublishError extends ErrorResponseBase implements TopicPublishResponse { - TopicPublishError(super.error); + TopicPublishError(super.exception); } \ No newline at end of file diff --git a/lib/src/topic_client.dart b/lib/src/topic_client.dart index eeabbb3..fd07a1c 100644 --- a/lib/src/topic_client.dart +++ b/lib/src/topic_client.dart @@ -1,46 +1,20 @@ -// TODO: Put public facing types in this file. - -import 'dart:typed_data'; - -import '../generated/cachepubsub.pb.dart'; -import 'package:grpc/grpc.dart'; - -sealed class Value {} -class StringValue implements Value { - String _value; - StringValue(String v) : _value = v; - String get value => _value; -} - -class BinaryValue implements Value { - Uint8List _value; - BinaryValue(Uint8List v) : _value = v; - Uint8List get value => _value; -} +import 'package:client_sdk_dart/src/auth/credential_provider.dart'; +import 'internal/pubsub_client.dart'; +import 'messages/Values.dart'; +import 'messages/responses/topics/topic_publish.dart'; abstract class ITopicClient { - void publish(String cacheName, String topicName, Value value); + Future publish(String cacheName, String topicName, Value value); } class TopicClient implements ITopicClient { - ClientChannel _channel; - - TopicClient() { - _channel = ClientChannel(host) - } - @override - void publish() { - // TODO: implement publish - } + ClientPubsub _pubsubClient; + CredentialProvider _credentialProvider; - void close() { + TopicClient(this._credentialProvider) : _pubsubClient = ClientPubsub(_credentialProvider); + @override + Future publish(String cacheName, String topicName, Value value) { + return this._pubsubClient.publish(cacheName, topicName, value); } } - -/// Checks if you are awesome. Spoiler: you are. -class Awesome { - bool get isAwesome => true; -} - -PubsubApi api = PubsubApi(); \ No newline at end of file diff --git a/test/client_sdk_dart_test.dart b/test/client_sdk_dart_test.dart deleted file mode 100644 index 4c4d253..0000000 --- a/test/client_sdk_dart_test.dart +++ /dev/null @@ -1,16 +0,0 @@ -import 'package:client_sdk_dart/client_sdk_dart.dart'; -import 'package:test/test.dart'; - -void main() { - group('A group of tests', () { - final awesome = Awesome(); - - setUp(() { - // Additional setup goes here. - }); - - test('First Test', () { - expect(awesome.isAwesome, isTrue); - }); - }); -}