sequenceDiagram
participant walker as Walker
participant request as RequestHint
participant value as Value\nT
participant value_borrow as Value\n&'ctx T
participant value_temp_borrow as Value\n&'a T
participant value_mut_borrow as Value\n&'ctx mut T
participant value_temp_mut_borrow as Value\n&'a mut T
Note over request,value_temp_mut_borrow: ValueBuilder
rect rgba(120, 120, 120, 0.2)
note left of walker: Value Flow\nOwned
walker ->> value: visit()
end
rect rgba(120, 120, 120, 0.2)
note left of walker: Value Flow\nContext Borrowed
walker ->> value_borrow: visit()
end
rect rgba(120, 120, 120, 0.2)
note left of walker: Value Flow\nTemp Borrowed
walker ->> value_temp_borrow: visit()
end
rect rgba(120, 120, 120, 0.2)
note left of walker: Value Flow\nContext Mutable Borrowed
walker ->> value_mut_borrow: visit()
end
rect rgba(120, 120, 120, 0.2)
note left of walker: Value Flow\nTemp Mutable Borrowed
walker ->> value_temp_mut_borrow: visit()
end
rect rgba(120, 120, 120, 0.2)
note left of walker: Request Hint Flow
walker ->> request: request_hint()
alt Walker supports by ownership
request ->> walker: hint<Value<T>>()
walker ->> value: visit()
else Walker supports by context borrow
request ->> walker: hint<Value<&'ctx T>>()
walker ->> value_borrow: visit()
else Walker supports by temp borrow
request ->> walker: hint<Value<&'a T>>()
walker ->> value_temp_borrow: visit()
else Walker supports by context mutable borrow
request ->> walker: hint<Value<&'ctx mut T>>()
walker ->> value_mut_borrow: visit()
else Walker supports by tmep mutable borrow
request ->> walker: hint<Value<&'a mut T>>()
walker ->> value_temp_mut_borrow: visit()
end
end