• Martin Atkins's avatar
    addrs: AbsMoveable, ConfigMoveable, and MoveableEndpoint · 4cbe6cab
    Martin Atkins authored
    These three types represent the three different address representations we
    need to represent different stages of analysis for "moved" blocks in the
    configuration.
    
    The goal here is to encapsulate all of the static address wrangling inside
    these types so that users of these types elsewhere would have to work
    pretty hard to use them incorrectly.
    
    In particular, the MovableEndpoint type intentionally fully encapsulates
    the weird relative addresses we use in configuration so that code
    elsewhere in Terraform can never end up holding an address of a type that
    suggests absolute when it's actually relative. That situation only occurs
    in the internals of MoveableEndpoint where we use not-really-absolute
    AbsMoveable address types to represent the not-yet-resolved relative
    addresses.
    
    This only takes care of the static address wrangling. There's lots of
    other rules for what makes a "moved" block valid which will need to be
    checked elsewhere because they require more context than just the content
    of the address itself.
    4cbe6cab