mapeo a un mapeo? o el mapeo a una estructura

¿Es posible hacer algo similar a lo siguiente? Actualmente, al compilarlo arrojará un error que dice que "El nombre debe referirse a una estructura, enumeración o contrato". También tengo un "trabajo?" solución más abajo, pero no estoy seguro de cuál sería la forma correcta.

mapping(address => uint256) shelf;
mapping (address => shelf) bookcase;

La idea es que una dirección apunte a un librero que va a un estante que va a un int (número de libros).

Lo siguiente funciona bien hasta ahora para establecer el valor para el estante. El problema en esta versión es que no puedo hacer público el librero y no sé cómo crear un captador.

struct shelf
{
  mapping(address => uint256) shelves;      
}
mapping (address => shelves) bookcase;
bookcase[msg.sender] = shelf();
//shelf_address is argument from the function this code is in
bookcase[msg.sender].shelves[shelf_address] = 1;

Gracias por los consejos.

Respuestas (1)

Así es como se utilizan estructuras y asignaciones anidadas dentro de una asignación.

Accesible a través de librería[--dirección--][--índice--].libros / librería[--dirección--][--índice--].shelfId Sin embargo, en la vida real harías que el segundo mapeo fuera una matriz.

pragma solidity ^0.4.10;

contract Mappings {
    mapping(address => mapping(uint256 => Shelf)) bookcase;
    struct Shelf {
      bytes32[] books;
      uint shelfId;
    }
}