createImplContent function

Spec createImplContent(
  1. ClientController controller
)

Implementation

Spec createImplContent(ClientController controller) {
  return Class(
    (b) => b
      ..name = controller.implementationName
      ..implements.add(refer(controller.interfaceName))
      ..constructors.add(
        Constructor(
          (b) => b
            ..constant = true
            ..optionalParameters.addAll([
              Parameter(
                (b) => b
                  ..name = 'client'
                  ..type = refer((RevaliClient).name)
                  ..named = true
                  ..required = true,
              ),
              Parameter(
                (b) => b
                  ..name = 'storage'
                  ..type = refer((Storage).name)
                  ..named = true
                  ..required = true,
              ),
              if (controller.hasWebsockets)
                Parameter(
                  (b) => b
                    ..name = 'websocket'
                    ..type = refer('WebSocketConnect')
                    ..named = true
                    ..required = true,
                ),
            ])
            ..initializers.addAll([
              refer('_client').assign(refer('client')).code,
              refer('_storage').assign(refer('storage')).code,
              if (controller.hasWebsockets)
                refer('_websocket').assign(refer('websocket')).code,
            ]),
        ),
      )
      ..fields.addAll([
        Field(
          (b) => b
            ..modifier = FieldModifier.final$
            ..name = '_client'
            ..type = refer((RevaliClient).name),
        ),
        Field(
          (b) => b
            ..modifier = FieldModifier.final$
            ..name = '_storage'
            ..type = refer((Storage).name),
        ),
        if (controller.hasWebsockets)
          Field(
            (b) => b
              ..modifier = FieldModifier.final$
              ..name = '_websocket'
              ..type = refer('WebSocketConnect'),
          ),
      ])
      ..methods.addAll([
        for (final method in controller.methods)
          if (!method.isExcluded) createImplMethod(method),
      ]),
  );
}