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