@startuml
class UniTaskAsyncEnumerable <<static>> <<partial>> {
    + {static} SelectMany(source:IUniTaskAsyncEnumerable<TSource>, selector:Func<TSource, IUniTaskAsyncEnumerable<TResult>>) : IUniTaskAsyncEnumerable<TResult>
    + {static} SelectMany(source:IUniTaskAsyncEnumerable<TSource>, selector:Func<TSource, Int32, IUniTaskAsyncEnumerable<TResult>>) : IUniTaskAsyncEnumerable<TResult>
    + {static} SelectMany(source:IUniTaskAsyncEnumerable<TSource>, collectionSelector:Func<TSource, IUniTaskAsyncEnumerable<TCollection>>, resultSelector:Func<TSource, TCollection, TResult>) : IUniTaskAsyncEnumerable<TResult>
    + {static} SelectMany(source:IUniTaskAsyncEnumerable<TSource>, collectionSelector:Func<TSource, Int32, IUniTaskAsyncEnumerable<TCollection>>, resultSelector:Func<TSource, TCollection, TResult>) : IUniTaskAsyncEnumerable<TResult>
    + {static} SelectManyAwait(source:IUniTaskAsyncEnumerable<TSource>, selector:Func<TSource, UniTask<IUniTaskAsyncEnumerable<TResult>>>) : IUniTaskAsyncEnumerable<TResult>
    + {static} SelectManyAwait(source:IUniTaskAsyncEnumerable<TSource>, selector:Func<TSource, Int32, UniTask<IUniTaskAsyncEnumerable<TResult>>>) : IUniTaskAsyncEnumerable<TResult>
    + {static} SelectManyAwait(source:IUniTaskAsyncEnumerable<TSource>, collectionSelector:Func<TSource, UniTask<IUniTaskAsyncEnumerable<TCollection>>>, resultSelector:Func<TSource, TCollection, UniTask<TResult>>) : IUniTaskAsyncEnumerable<TResult>
    + {static} SelectManyAwait(source:IUniTaskAsyncEnumerable<TSource>, collectionSelector:Func<TSource, Int32, UniTask<IUniTaskAsyncEnumerable<TCollection>>>, resultSelector:Func<TSource, TCollection, UniTask<TResult>>) : IUniTaskAsyncEnumerable<TResult>
    + {static} SelectManyAwaitWithCancellation(source:IUniTaskAsyncEnumerable<TSource>, selector:Func<TSource, CancellationToken, UniTask<IUniTaskAsyncEnumerable<TResult>>>) : IUniTaskAsyncEnumerable<TResult>
    + {static} SelectManyAwaitWithCancellation(source:IUniTaskAsyncEnumerable<TSource>, selector:Func<TSource, Int32, CancellationToken, UniTask<IUniTaskAsyncEnumerable<TResult>>>) : IUniTaskAsyncEnumerable<TResult>
    + {static} SelectManyAwaitWithCancellation(source:IUniTaskAsyncEnumerable<TSource>, collectionSelector:Func<TSource, CancellationToken, UniTask<IUniTaskAsyncEnumerable<TCollection>>>, resultSelector:Func<TSource, TCollection, CancellationToken, UniTask<TResult>>) : IUniTaskAsyncEnumerable<TResult>
    + {static} SelectManyAwaitWithCancellation(source:IUniTaskAsyncEnumerable<TSource>, collectionSelector:Func<TSource, Int32, CancellationToken, UniTask<IUniTaskAsyncEnumerable<TCollection>>>, resultSelector:Func<TSource, TCollection, CancellationToken, UniTask<TResult>>) : IUniTaskAsyncEnumerable<TResult>
}
class "SelectMany`3"<TSource,TCollection,TResult> <<sealed>> {
    + SelectMany(source:IUniTaskAsyncEnumerable<TSource>, selector:Func<TSource, IUniTaskAsyncEnumerable<TCollection>>, resultSelector:Func<TSource, TCollection, TResult>)
    + SelectMany(source:IUniTaskAsyncEnumerable<TSource>, selector:Func<TSource, int, IUniTaskAsyncEnumerable<TCollection>>, resultSelector:Func<TSource, TCollection, TResult>)
    + GetAsyncEnumerator(cancellationToken:CancellationToken) : IUniTaskAsyncEnumerator<TResult>
}
class "SelectManyAwait`3"<TSource,TCollection,TResult> <<sealed>> {
    + SelectManyAwait(source:IUniTaskAsyncEnumerable<TSource>, selector:Func<TSource, UniTask<IUniTaskAsyncEnumerable<TCollection>>>, resultSelector:Func<TSource, TCollection, UniTask<TResult>>)
    + SelectManyAwait(source:IUniTaskAsyncEnumerable<TSource>, selector:Func<TSource, int, UniTask<IUniTaskAsyncEnumerable<TCollection>>>, resultSelector:Func<TSource, TCollection, UniTask<TResult>>)
    + GetAsyncEnumerator(cancellationToken:CancellationToken) : IUniTaskAsyncEnumerator<TResult>
}
class "SelectManyAwaitWithCancellation`3"<TSource,TCollection,TResult> <<sealed>> {
    + SelectManyAwaitWithCancellation(source:IUniTaskAsyncEnumerable<TSource>, selector:Func<TSource, CancellationToken, UniTask<IUniTaskAsyncEnumerable<TCollection>>>, resultSelector:Func<TSource, TCollection, CancellationToken, UniTask<TResult>>)
    + SelectManyAwaitWithCancellation(source:IUniTaskAsyncEnumerable<TSource>, selector:Func<TSource, int, CancellationToken, UniTask<IUniTaskAsyncEnumerable<TCollection>>>, resultSelector:Func<TSource, TCollection, CancellationToken, UniTask<TResult>>)
    + GetAsyncEnumerator(cancellationToken:CancellationToken) : IUniTaskAsyncEnumerator<TResult>
}
class "IUniTaskAsyncEnumerable`1"<T> {
}
class _SelectMany <<sealed>> {
    + _SelectMany(source:IUniTaskAsyncEnumerable<TSource>, selector1:Func<TSource, IUniTaskAsyncEnumerable<TCollection>>, selector2:Func<TSource, int, IUniTaskAsyncEnumerable<TCollection>>, resultSelector:Func<TSource, TCollection, TResult>, cancellationToken:CancellationToken)
    + MoveNextAsync() : UniTask<bool>
    + <<async>> DisposeAsync() : UniTask
}
class _SelectManyAwait <<sealed>> {
    + _SelectManyAwait(source:IUniTaskAsyncEnumerable<TSource>, selector1:Func<TSource, UniTask<IUniTaskAsyncEnumerable<TCollection>>>, selector2:Func<TSource, int, UniTask<IUniTaskAsyncEnumerable<TCollection>>>, resultSelector:Func<TSource, TCollection, UniTask<TResult>>, cancellationToken:CancellationToken)
    + MoveNextAsync() : UniTask<bool>
    + <<async>> DisposeAsync() : UniTask
}
class _SelectManyAwaitWithCancellation <<sealed>> {
    + _SelectManyAwaitWithCancellation(source:IUniTaskAsyncEnumerable<TSource>, selector1:Func<TSource, CancellationToken, UniTask<IUniTaskAsyncEnumerable<TCollection>>>, selector2:Func<TSource, int, CancellationToken, UniTask<IUniTaskAsyncEnumerable<TCollection>>>, resultSelector:Func<TSource, TCollection, CancellationToken, UniTask<TResult>>, cancellationToken:CancellationToken)
    + MoveNextAsync() : UniTask<bool>
    + <<async>> DisposeAsync() : UniTask
}
class "IUniTaskAsyncEnumerator`1"<T> {
}
"IUniTaskAsyncEnumerable`1" "<TResult>" <|-- "SelectMany`3"
"IUniTaskAsyncEnumerable`1" "<TResult>" <|-- "SelectManyAwait`3"
"IUniTaskAsyncEnumerable`1" "<TResult>" <|-- "SelectManyAwaitWithCancellation`3"
"SelectMany`3" +-- _SelectMany
MoveNextSource <|-- _SelectMany
"IUniTaskAsyncEnumerator`1" "<TResult>" <|-- _SelectMany
_SelectMany --> "Current" TResult
"SelectManyAwait`3" +-- _SelectManyAwait
MoveNextSource <|-- _SelectManyAwait
"IUniTaskAsyncEnumerator`1" "<TResult>" <|-- _SelectManyAwait
_SelectManyAwait --> "Current" TResult
"SelectManyAwaitWithCancellation`3" +-- _SelectManyAwaitWithCancellation
MoveNextSource <|-- _SelectManyAwaitWithCancellation
"IUniTaskAsyncEnumerator`1" "<TResult>" <|-- _SelectManyAwaitWithCancellation
_SelectManyAwaitWithCancellation --> "Current" TResult
@enduml
