Skip to content

Commit e00a510

Browse files
Merge pull request #50 from adessoTurkey/feature/replace-either-with-kt-result
Replace Either with kotlin-result
2 parents abbf6b4 + 007a4b9 commit e00a510

File tree

14 files changed

+79
-104
lines changed

14 files changed

+79
-104
lines changed

.github/workflows/prod-release.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ on:
88
jobs:
99
test:
1010
name: Run unit tests & static analysis checks
11-
runs-on: ubuntu-18.04
11+
runs-on: ubuntu-latest
1212

1313
steps:
1414
- uses: actions/checkout@v1
@@ -26,7 +26,7 @@ jobs:
2626

2727
buildAndDeployAPK:
2828
name: Build signed APK and deploy to AppCenter
29-
runs-on: ubuntu-18.04
29+
runs-on: ubuntu-latest
3030
steps:
3131
- uses: actions/checkout@v2
3232
- name: Set up JDK 11
@@ -49,7 +49,7 @@ jobs:
4949
run: |
5050
bash ./gradlew assemblePrdRelease
5151
mv $(ls app/build/outputs/apk/prd/release/*.apk) app-release.apk
52-
# TODO update above when AppCenter-Github-Action supports ant style glob pattern
52+
# TODO update above when AppCenter-Github-Action supports ant style glob pattern
5353

5454
- name: Upload APK to AppCenter
5555
uses: wzieba/AppCenter-Github-Action@v1.0.0

.github/workflows/pull-request.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ on:
1010
jobs:
1111
test:
1212
name: Run unit tests & static analysis checks
13-
runs-on: ubuntu-18.04
13+
runs-on: ubuntu-latest
1414

1515
steps:
1616
- uses: actions/checkout@v1

.github/workflows/test-release.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ on:
88
jobs:
99
test:
1010
name: Run unit tests & static analysis checks
11-
runs-on: ubuntu-18.04
11+
runs-on: ubuntu-latest
1212

1313
steps:
1414
- uses: actions/checkout@v1
@@ -26,7 +26,7 @@ jobs:
2626

2727
buildAndDeployAPK:
2828
name: Build signed APK and deploy to AppCenter
29-
runs-on: ubuntu-18.04
29+
runs-on: ubuntu-latest
3030
steps:
3131
- uses: actions/checkout@v2
3232
- name: Set up JDK 11
@@ -49,7 +49,7 @@ jobs:
4949
run: |
5050
bash ./gradlew assembleDevRelease
5151
mv $(ls app/build/outputs/apk/dev/release/*.apk) app-release.apk
52-
# TODO update above when AppCenter-Github-Action supports ant style glob pattern
52+
# TODO update above when AppCenter-Github-Action supports ant style glob pattern
5353

5454
- name: Upload APK to AppCenter
5555
uses: wzieba/AppCenter-Github-Action@v1.0.0

app/src/main/kotlin/com/adesso/movee/internal/util/UseCase.kt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
package com.adesso.movee.internal.util
22

3-
import com.adesso.movee.internal.util.functional.Either
3+
import com.github.michaelbull.result.Err
4+
import com.github.michaelbull.result.Ok
5+
import com.github.michaelbull.result.Result
46

57
abstract class UseCase<out Type, in Params> where Type : Any {
68

79
protected abstract suspend fun buildUseCase(params: Params): Type
810

9-
suspend fun run(params: Params): Either<Failure, Type> {
11+
suspend fun run(params: Params): Result<Type, Failure> {
1012
return try {
11-
Either.Right(buildUseCase(params))
13+
Ok(buildUseCase(params))
1214
} catch (failure: Failure) {
13-
Either.Left(failure)
15+
Err(failure)
1416
}
1517
}
1618

app/src/main/kotlin/com/adesso/movee/internal/util/functional/Either.kt

Lines changed: 0 additions & 71 deletions
This file was deleted.

app/src/main/kotlin/com/adesso/movee/scene/login/LoginViewModel.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@ import androidx.lifecycle.MutableLiveData
77
import com.adesso.movee.base.BaseAndroidViewModel
88
import com.adesso.movee.domain.LoginUseCase
99
import com.adesso.movee.internal.util.Event
10-
import javax.inject.Inject
10+
import com.github.michaelbull.result.onFailure
11+
import com.github.michaelbull.result.onSuccess
1112
import kotlinx.coroutines.launch
13+
import javax.inject.Inject
1214

1315
class LoginViewModel @Inject constructor(
1416
private val loginUseCase: LoginUseCase,
@@ -38,7 +40,9 @@ class LoginViewModel @Inject constructor(
3840
loginUseCase.run(LoginUseCase.Params(username, password))
3941
}
4042

41-
loginResult.either(::handleFailure, ::navigateHome)
43+
loginResult
44+
.onSuccess { navigateHome() }
45+
.onFailure(::handleFailure)
4246

4347
_loginInProgress.value = false
4448
}

app/src/main/kotlin/com/adesso/movee/scene/movie/MovieViewModel.kt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@ import com.adesso.movee.internal.util.UseCase
1717
import com.adesso.movee.uimodel.MovieUiModel
1818
import com.adesso.movee.uimodel.ShowHeaderUiModel
1919
import com.adesso.movee.uimodel.ShowUiModel
20-
import javax.inject.Inject
20+
import com.github.michaelbull.result.onFailure
21+
import com.github.michaelbull.result.onSuccess
2122
import kotlinx.coroutines.launch
23+
import javax.inject.Inject
2224

2325
class MovieViewModel @Inject constructor(
2426
private val fetchPopularMoviesUseCase: FetchPopularMoviesUseCase,
@@ -53,7 +55,9 @@ class MovieViewModel @Inject constructor(
5355
val nowPlayingMoviesResult = fetchNowPlayingMoviesUseCase.run(UseCase.None)
5456

5557
onUIThread {
56-
nowPlayingMoviesResult.either(::handleFailure, ::postNowPlayingMovieList)
58+
nowPlayingMoviesResult
59+
.onSuccess(::postNowPlayingMovieList)
60+
.onFailure(::handleFailure)
5761
}
5862
}
5963
}
@@ -67,7 +71,9 @@ class MovieViewModel @Inject constructor(
6771
val popularMoviesResult = fetchPopularMoviesUseCase.run(UseCase.None)
6872

6973
onUIThread {
70-
popularMoviesResult.either(::handleFailure, ::postPopularMovieList)
74+
popularMoviesResult
75+
.onSuccess(::postPopularMovieList)
76+
.onFailure(::handleFailure)
7177
}
7278
}
7379
}

app/src/main/kotlin/com/adesso/movee/scene/moviedetail/MovieDetailViewModel.kt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@ import com.adesso.movee.domain.FetchMovieCreditsUseCase
88
import com.adesso.movee.domain.FetchMovieDetailUseCase
99
import com.adesso.movee.uimodel.MovieCreditUiModel
1010
import com.adesso.movee.uimodel.MovieDetailUiModel
11-
import javax.inject.Inject
11+
import com.github.michaelbull.result.onFailure
12+
import com.github.michaelbull.result.onSuccess
1213
import kotlinx.coroutines.launch
14+
import javax.inject.Inject
1315

1416
class MovieDetailViewModel @Inject constructor(
1517
private val fetchMovieDetailUseCase: FetchMovieDetailUseCase,
@@ -29,7 +31,9 @@ class MovieDetailViewModel @Inject constructor(
2931
fetchMovieDetailUseCase.run(FetchMovieDetailUseCase.Params(id))
3032

3133
onUIThread {
32-
movieDetailResult.either(::handleFailure, ::postMovieDetail)
34+
movieDetailResult
35+
.onSuccess(::postMovieDetail)
36+
.onFailure(::handleFailure)
3337
}
3438
}
3539
}
@@ -46,7 +50,9 @@ class MovieDetailViewModel @Inject constructor(
4650
fetchMovieCreditsUseCase.run(FetchMovieCreditsUseCase.Params(id))
4751

4852
onUIThread {
49-
movieCreditsResult.either(::handleFailure, ::postMovieCredits)
53+
movieCreditsResult
54+
.onSuccess(::postMovieCredits)
55+
.onFailure(::handleFailure)
5056
}
5157
}
5258
}

app/src/main/kotlin/com/adesso/movee/scene/persondetail/PersonDetailViewModel.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@ import com.adesso.movee.internal.util.AppBarStateChangeListener.State.COLLAPSED
1010
import com.adesso.movee.internal.util.AppBarStateChangeListener.State.EXPANDED
1111
import com.adesso.movee.internal.util.AppBarStateChangeListener.State.IDLE
1212
import com.adesso.movee.uimodel.PersonDetailUiModel
13-
import javax.inject.Inject
13+
import com.github.michaelbull.result.onFailure
14+
import com.github.michaelbull.result.onSuccess
1415
import kotlinx.coroutines.launch
16+
import javax.inject.Inject
1517

1618
class PersonDetailViewModel @Inject constructor(
1719
private val fetchPersonDetailsUseCase: FetchPersonDetailsUseCase,
@@ -30,7 +32,9 @@ class PersonDetailViewModel @Inject constructor(
3032
fetchPersonDetailsUseCase.run(FetchPersonDetailsUseCase.Params(personId))
3133

3234
onUIThread {
33-
personDetailResult.either(::handleFailure, ::postPersonDetails)
35+
personDetailResult
36+
.onSuccess(::postPersonDetails)
37+
.onFailure(::handleFailure)
3438
}
3539
}
3640
}

app/src/main/kotlin/com/adesso/movee/scene/profile/ProfileViewModel.kt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@ import com.adesso.movee.domain.GetLoginStateUseCase
1010
import com.adesso.movee.internal.util.UseCase
1111
import com.adesso.movee.uimodel.LoginState
1212
import com.adesso.movee.uimodel.UserDetailUiModel
13-
import javax.inject.Inject
13+
import com.github.michaelbull.result.onFailure
14+
import com.github.michaelbull.result.onSuccess
1415
import kotlinx.coroutines.launch
16+
import javax.inject.Inject
1517

1618
class ProfileViewModel @Inject constructor(
1719
private val fetchUserDetailsUseCase: FetchUserDetailsUseCase,
@@ -36,7 +38,9 @@ class ProfileViewModel @Inject constructor(
3638
val loginStateResult = getLoginStateUseCase.run(UseCase.None)
3739

3840
onUIThread {
39-
loginStateResult.either(::handleFailure, ::handleLoginStateSuccess)
41+
loginStateResult
42+
.onSuccess(::handleLoginStateSuccess)
43+
.onFailure(::handleFailure)
4044
}
4145
}
4246
}
@@ -62,7 +66,9 @@ class ProfileViewModel @Inject constructor(
6266
val userDetailsResult = fetchUserDetailsUseCase.run(UseCase.None)
6367

6468
onUIThread {
65-
userDetailsResult.either(::handleFailure, ::postUserDetails)
69+
userDetailsResult
70+
.onSuccess(::postUserDetails)
71+
.onFailure(::handleFailure)
6672
}
6773
}
6874
}

app/src/main/kotlin/com/adesso/movee/scene/search/SearchViewModel.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@ import com.adesso.movee.uimodel.MovieMultiSearchUiModel
1010
import com.adesso.movee.uimodel.MultiSearchUiModel
1111
import com.adesso.movee.uimodel.PersonMultiSearchUiModel
1212
import com.adesso.movee.uimodel.TvShowMultiSearchUiModel
13-
import javax.inject.Inject
13+
import com.github.michaelbull.result.onFailure
14+
import com.github.michaelbull.result.onSuccess
1415
import kotlinx.coroutines.CancellationException
1516
import kotlinx.coroutines.Job
1617
import kotlinx.coroutines.launch
18+
import javax.inject.Inject
1719

1820
class SearchViewModel @Inject constructor(
1921
private val multiSearchUseCase: MultiSearchUseCase,
@@ -34,7 +36,9 @@ class SearchViewModel @Inject constructor(
3436
multiSearchJob = bgScope.launch {
3537
val searchResult = multiSearchUseCase.run(MultiSearchUseCase.Params(query))
3638
onUIThread {
37-
searchResult.either(::handleSearchFailure, ::postMultiSearchResult)
39+
searchResult
40+
.onSuccess(::postMultiSearchResult)
41+
.onFailure(::handleFailure)
3842
}
3943
}
4044
}

app/src/main/kotlin/com/adesso/movee/scene/tvshow/TvShowViewModel.kt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@ import com.adesso.movee.internal.util.UseCase
1616
import com.adesso.movee.uimodel.ShowHeaderUiModel
1717
import com.adesso.movee.uimodel.ShowUiModel
1818
import com.adesso.movee.uimodel.TvShowUiModel
19-
import javax.inject.Inject
19+
import com.github.michaelbull.result.onFailure
20+
import com.github.michaelbull.result.onSuccess
2021
import kotlinx.coroutines.launch
22+
import javax.inject.Inject
2123

2224
class TvShowViewModel @Inject constructor(
2325
private val fetchTopRatedTvShowsUseCase: FetchTopRatedTvShowsUseCase,
@@ -52,7 +54,9 @@ class TvShowViewModel @Inject constructor(
5254
val topRatedTvShowsResult = fetchTopRatedTvShowsUseCase.run(UseCase.None)
5355

5456
onUIThread {
55-
topRatedTvShowsResult.either(::handleFailure, ::postTopRatedTvShows)
57+
topRatedTvShowsResult
58+
.onSuccess(::postTopRatedTvShows)
59+
.onFailure(::handleFailure)
5660
}
5761
}
5862
}
@@ -66,7 +70,9 @@ class TvShowViewModel @Inject constructor(
6670
val nowPlayingTvShowsResult = fetchNowPlayingTvShowsUseCase.run(UseCase.None)
6771

6872
onUIThread {
69-
nowPlayingTvShowsResult.either(::handleFailure, ::postNowPlayingTvShows)
73+
nowPlayingTvShowsResult
74+
.onSuccess(::postNowPlayingTvShows)
75+
.onFailure(::handleFailure)
7076
}
7177
}
7278
}

app/src/main/kotlin/com/adesso/movee/scene/tvshowdetail/TvShowDetailViewModel.kt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@ import com.adesso.movee.domain.FetchTvShowDetailUseCase
1010
import com.adesso.movee.uimodel.TvShowCastUiModel
1111
import com.adesso.movee.uimodel.TvShowCreditUiModel
1212
import com.adesso.movee.uimodel.TvShowDetailUiModel
13-
import javax.inject.Inject
13+
import com.github.michaelbull.result.onFailure
14+
import com.github.michaelbull.result.onSuccess
1415
import kotlinx.coroutines.launch
16+
import javax.inject.Inject
1517

1618
class TvShowDetailViewModel @Inject constructor(
1719
private val fetchTvShowDetailUseCase: FetchTvShowDetailUseCase,
@@ -34,7 +36,9 @@ class TvShowDetailViewModel @Inject constructor(
3436
fetchTvShowDetailUseCase.run(FetchTvShowDetailUseCase.Params(id))
3537

3638
onUIThread {
37-
tvShowDetailResult.either(::handleFailure, ::postTvShowDetail)
39+
tvShowDetailResult
40+
.onSuccess(::postTvShowDetail)
41+
.onFailure(::handleFailure)
3842
}
3943
}
4044
}
@@ -51,7 +55,9 @@ class TvShowDetailViewModel @Inject constructor(
5155
fetchTvShowCreditsUseCase.run(FetchTvShowCreditsUseCase.Params(id))
5256

5357
onUIThread {
54-
tvShowCreditResult.either(::handleFailure, ::postTvShowCredits)
58+
tvShowCreditResult
59+
.onSuccess(::postTvShowCredits)
60+
.onFailure(::handleFailure)
5561
}
5662
}
5763
}

0 commit comments

Comments
 (0)