fn try_from()

in focus/util/src/git/model.rs [299:414]


    fn try_from(value: (State, Disposition, Disposition)) -> Result<Self, Self::Error> {
        let (state, x, y) = value;
        match (state, x, y) {
            (
                State::Regular,
                Disposition::Unmodified,
                Disposition::Added | Disposition::Modified | Disposition::Deleted,
            ) => Ok(DispositionInterpretation::NotUpdated),
            (
                State::Regular,
                Disposition::Modified,
                Disposition::Unmodified
                | Disposition::Modified
                | Disposition::FileTypeChanged
                | Disposition::Deleted,
            ) => Ok(DispositionInterpretation::UpdatedInIndex),
            (
                State::Regular,
                Disposition::FileTypeChanged,
                Disposition::Unmodified
                | Disposition::Modified
                | Disposition::FileTypeChanged
                | Disposition::Deleted,
            ) => Ok(DispositionInterpretation::TypeChangedInIndex),
            (
                State::Regular,
                Disposition::Added,
                Disposition::Unmodified
                | Disposition::Modified
                | Disposition::FileTypeChanged
                | Disposition::Deleted,
            ) => Ok(DispositionInterpretation::AddedToIndex),
            (State::Regular, Disposition::Deleted, _) => {
                Ok(DispositionInterpretation::DeletedFromIndex)
            }
            (
                State::Regular,
                Disposition::Renamed,
                Disposition::Unmodified
                | Disposition::Modified
                | Disposition::FileTypeChanged
                | Disposition::Deleted,
            ) => Ok(DispositionInterpretation::RenamedInIndex),
            (
                State::Regular,
                Disposition::Copied,
                Disposition::Unmodified
                | Disposition::Modified
                | Disposition::FileTypeChanged
                | Disposition::Deleted,
            ) => Ok(DispositionInterpretation::CopiedInIndex),
            // (
            //     State::Regular,
            //     Disposition::Modified
            //     | Disposition::FileTypeChanged
            //     | Disposition::Added
            //     | Disposition::Renamed
            //     | Disposition::Copied,
            //     Disposition::Unmodified,
            // ) =>
            // /* TODO: Figure out why this pattern is not matched */
            // {
            //     Ok(DispositionInterpretation::IndexAndWorkingTreeMatches)
            // }
            (State::Regular, _, Disposition::Modified) => {
                Ok(DispositionInterpretation::WorkTreeChangedSinceIndex)
            }
            (State::Regular, _, Disposition::FileTypeChanged) => {
                Ok(DispositionInterpretation::TypeChangedInWorkTreeSinceIndex)
            }
            (State::Regular, _, Disposition::Deleted) => {
                Ok(DispositionInterpretation::DeletedInWorkTree)
            }
            (State::Regular, Disposition::Unmodified, Disposition::Renamed) => {
                Ok(DispositionInterpretation::RenamedInWorkTree)
            }
            (State::Regular, Disposition::Unmodified, Disposition::Copied) => {
                Ok(DispositionInterpretation::CopiedInWorkTree)
            }
            (State::Unmerged, Disposition::Deleted, Disposition::Deleted) => {
                Ok(DispositionInterpretation::UnmergedBothDeleted)
            }
            (State::Unmerged, Disposition::Added, Disposition::UpdatedButUnmerged) => {
                Ok(DispositionInterpretation::UnmergedAddedByUs)
            }
            (State::Unmerged, Disposition::UpdatedButUnmerged, Disposition::Deleted) => {
                Ok(DispositionInterpretation::UnmergedDeletedByThem)
            }
            (State::Unmerged, Disposition::UpdatedButUnmerged, Disposition::Added) => {
                Ok(DispositionInterpretation::UnmergedAddedByThem)
            }
            (State::Unmerged, Disposition::Deleted, Disposition::UpdatedButUnmerged) => {
                Ok(DispositionInterpretation::UnmergedDeletedByUs)
            }
            (State::Unmerged, Disposition::Added, Disposition::Added) => {
                Ok(DispositionInterpretation::UnmergedBothAdded)
            }
            (State::Unmerged, Disposition::UpdatedButUnmerged, Disposition::UpdatedButUnmerged) => {
                Ok(DispositionInterpretation::UnmergedBothModified)
            }

            (_, Disposition::Untracked, Disposition::Untracked) => {
                Ok(DispositionInterpretation::Untracked)
            }
            (_, Disposition::Ignored, Disposition::Ignored) => {
                Ok(DispositionInterpretation::Ignored)
            }

            _ => Err(anyhow::anyhow!(
                "Unsupported disposition combination (state={:?}, X='{:?}', Y='{:?}'",
                &state,
                x,
                y
            )),
        }
    }