Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ package com.example.fluentfuncleanarchitecture.data
import com.example.fluentfuncleanarchitecture.domain.MainEntity
import com.example.fluentfuncleanarchitecture.domain.Repository
import com.example.fluentfuncleanarchitecture.domain.RepositoryType
import com.example.fluentfuncleanarchitecture.domain.RepositoryWithParamsType
import com.example.fluentfuncleanarchitecture.domain.Result
import com.example.fluentfuncleanarchitecture.domain.Success
import kotlinx.coroutines.delay
Expand Down Expand Up @@ -45,4 +46,8 @@ class DataRepository @Inject constructor() : Repository {
Success(MainEntity(3, "Reusable Result"))
}

override val setParams: RepositoryWithParamsType<Result> = {
Success(MainEntity(3, it))
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.example.fluentfuncleanarchitecture.data
import com.example.fluentfuncleanarchitecture.domain.MainEntity
import com.example.fluentfuncleanarchitecture.domain.Repository
import com.example.fluentfuncleanarchitecture.domain.RepositoryType
import com.example.fluentfuncleanarchitecture.domain.RepositoryWithParamsType
import com.example.fluentfuncleanarchitecture.domain.Result
import com.example.fluentfuncleanarchitecture.domain.Success
import kotlinx.coroutines.delay
Expand Down Expand Up @@ -39,4 +40,8 @@ object ObjectRepository: Repository {
Success(MainEntity(3, "Reusable Result"))
}

override val setParams: RepositoryWithParamsType<Result> = {
Success(MainEntity(3, it))
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ import kotlinx.coroutines.flow.Flow
*/
typealias RepositoryType<GenericResult> = suspend () -> GenericResult

typealias RepositoryWithParamsType<GenericResult> = suspend (String) -> GenericResult


/**
* A generic type for handling UseCase.
*
Expand Down Expand Up @@ -52,3 +55,7 @@ typealias ComposeUseCase<GenericRepository, GenericResult> = suspend GenericResu

typealias FlowUseCaseType<GenericRepository, GenericResult> = suspend GenericRepository.() -> Flow<GenericResult>


typealias UseCaseWithParamsType<GenericRepository, GenericResult> = suspend GenericRepository.(String) -> GenericResult


Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,6 @@ interface Repository {

val getSampleResult: RepositoryType<Result>

val setParams: RepositoryWithParamsType<Result>

}
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@ val sampleResult: UseCaseType<Repository, Result> = {
getThirdResult()
}

val resultWithParams: UseCaseWithParamsType<Repository, Result> = {
setParams(it)
}


private val firstResult: UseCaseType<Repository, Result> = {
getResult()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ class MainActivity : AppCompatActivity() {
}

private fun MainViewModel.load() {
accept("accept any params")
loadResult()
loadFlowResult()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,15 @@

package com.example.fluentfuncleanarchitecture.presentation

import android.util.Log
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.example.fluentfuncleanarchitecture.domain.Error
import com.example.fluentfuncleanarchitecture.domain.Result
import com.example.fluentfuncleanarchitecture.domain.Success
import com.example.fluentfuncleanarchitecture.domain.allResultWhenComposed
import com.example.fluentfuncleanarchitecture.domain.resultFlow
import com.example.fluentfuncleanarchitecture.domain.resultWithParams
import com.example.fluentfuncleanarchitecture.domain.sampleResult
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow
Expand All @@ -27,6 +29,14 @@ class MainViewModel @Inject constructor(myUseCase: UseCase) : ViewModel() {
private val _flow: MutableStateFlow<MainState> = MutableStateFlow(EmptyState)
val flow: StateFlow<MainState> = _flow.asStateFlow()

val accept: (String) -> Unit = { input ->
viewModelScope.launch {
myUseCase.accepts(resultWithParams, input).also {
Log.d("AcceptWithParams", "accepts: $it")
}
}
}

val loadResult = {
viewModelScope.launch {
_flow.update {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import com.example.fluentfuncleanarchitecture.domain.FlowUseCaseType
import com.example.fluentfuncleanarchitecture.domain.Repository
import com.example.fluentfuncleanarchitecture.domain.Result
import com.example.fluentfuncleanarchitecture.domain.UseCaseType
import com.example.fluentfuncleanarchitecture.domain.UseCaseWithParamsType
import kotlinx.coroutines.flow.Flow
import javax.inject.Inject

Expand All @@ -15,4 +16,8 @@ class UseCase @Inject constructor(private val repository: Repository) {
suspend infix fun prepares(useCase: FlowUseCaseType<Repository, Result>): Flow<Result> {
return repository.useCase()
}

suspend fun accepts(useCase: UseCaseWithParamsType<Repository, Result>, params: String): Result {
return repository.useCase(params)
}
}
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:textSize="50sp"
app:fontFamily="@font/virgil"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
Expand Down