# MoveServiceFailure

{% tabs %}
{% tab title="Android" %}

```kotlin
data class MoveServiceFailure( 
    val service: MoveDetectionService, 
    val reasons: List<MoveError>
)

sealed class MoveError {

    object Unauthorized : MoveError()
    object InternetPermissionMissing : MoveError()
    object LocationPermissionMissing : MoveError()
    object PhonePermissionMissing : MoveError()
    object OverlayPermissionMissing : MoveError()
    object MotionPermissionMissing : MoveError()
    object BackgroundLocationPermissionMissing : MoveError()
    object BatteryPermissionMissing : MoveError()
    object AccelerometerMissing : MoveError()
    object GooglePlayLocationAccuracyMissing : MoveError()
    object GyroscopeMissing : MoveError()
    object HealthConnectClientMissing : MoveError()
    object HealthConnectRequiresUpdate : MoveError()
    object HealthConnectReadStepsPermissionMissing : MoveError()
    object HealthConnectBackgroundReadStepsPermissionMissing : MoveError()
    
}
```

{% endtab %}

{% tab title="iOS" %}

```swift
struct MoveServiceFailure {
    enum Reason {
        case unauthorized
        case missingPermission([MovePermission])
    }

    var service: MoveConfig.DetectionService
    var reason: Reason
}

enum MovePermission: Int {
    case location
    case backgroundLocation
    case preciseLocation
    case motionActivity
    case gyroscope
    case accelerometer
    case steps
}
```

{% endtab %}

{% tab title="React Native" %}

```typescript
export type ErrorReasons =
  | 'BACKGROUND_LOCATION_PERMISSION_MISSING'
  | 'LOCATION_PERMISSION_MISSING'
  | 'MOTION_PERMISSION_MISSING'
  | 'ACTIVITY_PERMISSION_MISSING'
  | 'BATTERY_PERMISSION_MISSING'
  | 'UNAUTHORIZED'
  | 'INTERNET_PERMISSION_MISSING'
  | 'PHONE_PERMISSION_MISSING'
  | 'OVERLAY_PERMISSION_MISSING'
  | 'ACCELEROMETER_MISSING'
  | 'GOOGLE_PLAY_LOCATION_ACCURACY_MISSING'
  | 'PRECISE_LOCATION_PERMISSION_MISSING' 
  | 'HEALTH_CONNECT_CLIENT_MISSING' 
  | 'HEALTH_CONNECT_REQUIRES_UPDATE' 
  | 'HEALTH_CONNECT_READ_STEPS_PERMISSION_MISSING' 
  | 'HEALTH_CONNECT_BACKGROUND_READ_STEPS_PERMISSION_MISSING';

export type IssueListService =
  | TimelineDetectionService
  | DrivingService
  | WalkingService;

export type IssueListItem<ReasonsType> = {
  reasons: Array<ReasonsType>;
  service?: IssueListService;
};

export type ErrorListType = Array<IssueListItem<ErrorReasons>>;
```

{% endtab %}

{% tab title="Flutter" %}

```dart
import 'package:movesdk/io/dolphin/move/move_service_warning.dart';
```

```dart
class MoveServiceError {
  final MoveDetectionService service;
  final List<MoveError> reasons;
}
```

```dart
enum MoveError {
  accelerometerMissing,
  activityPermissionMissing,
  backgroundLocationPermissionMissing,
  batteryPermissionMissing,
  bluetoothScanPermissionMissing,
  googlePlayLocationAccuracyMissing,
  gyroscopeMissing,
  healthConnectReadStepsPermissionMissing,
  healthConnectBackgroundReadStepsPermissionMissing,
  internetPermissionMissing,
  locationPermissionMissing,
  motionPermissionMissing,
  phonePermissionMissing,
  preciseLocationPermissionMissing,
  overlayPermissionMissing,
  unauthorized,
}
```

{% endtab %}
{% endtabs %}

<table data-header-hidden><thead><tr><th>Parameter</th><th></th><th data-hidden></th></tr></thead><tbody><tr><td><strong>Field</strong></td><td></td><td></td></tr><tr><td>service</td><td>see <code>MoveDetectionService</code> in <a href="moveconfig">MoveConfig</a></td><td></td></tr><tr><td>reasons</td><td>List of required Permissions (<a href="../appendix/android/permission-handling">Android</a> / <a href="../appendix/ios/permission-handling">iOS</a>) / Features or unauthorized if not in server config.</td><td></td></tr></tbody></table>
